如何覆盖 a 的内容ZipArchiveEntry
?以下代码使用StreamWriter
with StringBuilder
如果新文件内容比原始文件内容短,则会失败,例如:
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"
}
}
生成包含混合“baz123123”而不是预期的“baz123”的新旧内容的文件。
也许有办法如何丢弃旧内容ZipArchiveEntry
在写新的之前?
注:我不想extract该文件,我想要改变内容档案的。
另一种方法是SetLength(document.Length)
of the entry.Open()
stream.
using(var stream = entry.Open())
{
stream.SetLength(document.Length);
using (StreamWriter writer = new StreamWriter(stream))
{
writer.Write(document); //entry contents "baz123"
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)