How can I overwrite contents of a ZipArchiveEntry
? Following code using StreamWriter
with StringBuilder
fails if the new file contents are shorter than the original ones, for example:
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"
}
}
Produces file containing new and old contents mixed up "baz123123" instead of expected "baz123".
Is there perhaps a way how to discard the old contents of ZipArchiveEntry
before writing the new ones?
note: I do not want to extract the file, I would like to change contents of the archive.