Comment créer ZipArchive correctement?

je suis en train d'écrire Desktop application WPF (.Net Framework 4.5) et l'une des tâches est d'enregistrer plusieurs fichiers d'archive zip. J'ai fait les 2 méthodes. D'abord pour créer des zip, deuxième de lire.

    public static String GetFileContent(String zipPath, String entityName)
    {
        String retVal = String.Empty;

        using (ZipArchive zipfile = ZipFile.OpenRead(zipPath))
        {                    
            foreach (ZipArchiveEntry entry in zipfile.Entries)
            {
                if (entry.Name.ToLower() == entityName)
                {
                    using (StreamReader s = new StreamReader(entry.Open()))
                    {
                        retVal = s.ReadToEnd();
                        break;
                    }
                }
            }
        }

        return retVal;
    }

    public static void SetArchive(String path, String zipName, Dictionary<String, String> files)
    {
        using (var fileStream = new FileStream(Path.Combine(path, zipName), FileMode.OpenOrCreate))
        {
            using (ZipArchive zip = new ZipArchive(fileStream, ZipArchiveMode.Create))
            {                    
                foreach (KeyValuePair<String, String> file in files)
                {
                    var entry = zip.CreateEntry(file.Key, CompressionLevel.Optimal);
                    using (Stream s = entry.Open())
                    {           
                        byte[] data = Encoding.UTF8.GetBytes(file.Value);
                        s.Write(data, 0, data.Length);
                    }
                }                    
            }            
        }
    }

Chose, c'est que l'archive zip créé et loin de gestionnaire et de WinRAR peut l'ouvrir, mais quand j'utilise la deuxième méthode pour lire son contenu, je reçois des

Nombre d'entrées attendues en Fin De Répertoire Central ne correspond pas au nombre d'entrées dans l'Annuaire.
au Système.IO.La Compression.ZipArchive.ReadCentralDirectory()
au Système.IO.La Compression.ZipArchive.get_Entries()
chez Microsoft.MCS.SPPal.Le stockage.StorageObject.GetFileContent(String zipPath, Chaîne entityName) z:\Home Inc\Microsoft.MCS.SPPal\Microsoft.MCS.SPPal\Stockage\StorageObject.cs:ligne 32
chez Microsoft.MCS.SPPal.MainWindow..ctor() dans z:\Home Inc\Microsoft.MCS.SPPal\Microsoft.MCS.SPPal\MainWindow.xaml.cs:ligne 48

Comme une partie de l'expérience, j'ai créé la nouvelle archive dans far manager, et l'ouvrit avec GetFileContent méthode, et il fonctionne comme un charme. Donc je pense que l'erreur doit être dans SetArchive méthode.

Toute aide serait génial, il est 3 heures du matin et je suis coincé.

P. S: je sais que le code de la conception sucer, il a été réécrit des dizaines de fois.

OriginalL'auteur Silverlay | 2013-04-25