如何覆蓋ZipArchiveEntry
的內容?繼使用StreamWriter
與StringBuilder
如果新的文件內容比原有的更短的失敗,例如代碼:覆蓋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"
}
}
產生含有混合了「baz123123」,而不是預期的「baz123」新老內容的文件。 在寫新的內容之前,如何丟棄ZipArchiveEntry
的舊內容或許有一種方法?
注意:我不想提取該文件,我想更改內容的存檔。
@mjwills只是按Ctrl + C和Ctrl + V的代碼,然後按運行。 (需要使用foo.txt文件的「Test.zip」壓縮包,但是不能真正將其附加到問題上,但是應該足夠快) – wondra
感謝@wondra更新代碼以使https://stackoverflow.com/help/mcve。 – mjwills
@wondra獲取內容,刪除條目,修改內容,添加修改內容的條目。 – Nkosi