Comment remplacer le contenu d'un ZipArchiveEntry
? code suivant à l'aide StreamWriter
avec StringBuilder
échoue si le nouveau contenu de fichiers sont plus courts que ceux d'origine, par exemple:Écraser le contenu de ZipArchiveEntry
using System.IO.Compression;
//...
using (var archive = ZipFile.Open("Test.zip", ZipArchiveMode.Update))
{
StringBuilder document;
var entry = archive.GetEntry("foo.txt");//entry contents "foobar123"
using (StreamReader reader = new StreamReader(entry.Open()))
{
document = new StringBuilder(reader.ReadToEnd());
}
document.Replace("foobar", "baz"); //builder contents "baz123"
using (StreamWriter writer = new StreamWriter(entry.Open()))
{
writer.Write(document); //entry contents "baz123123", expected "baz123"
}
}
fichier contenant Produit nouveaux et anciens contenus mélangés « baz123123 » au lieu de prévu « baz123 ». Existe-t-il un moyen de jeter l'ancien contenu de ZipArchiveEntry
avant d'écrire les nouveaux?
note: Je ne veux pas extrait le fichier, je voudrais changer le contenu de l'archive.
(Vous avez besoin de l'archive "Test.zip" avec le fichier foo.txt, je ne peux vraiment pas l'attacher à la question, mais en faire une devrait être assez rapide) – wondra
Merci @wondra de mettre à jour le code pour créer le https://stackoverflow.com/help/mcve. – mjwills
@wondra récupérer le contenu, supprimer l'entrée, modifier le contenu, ajouter une entrée avec le contenu modifié. – Nkosi