是否可以直接在zip文件中更改文件内容
本文关键字:文件 zip 是否 | 更新日期: 2023-09-27 17:57:25
我有带有文本框的表单,客户希望将此文本框中的所有更改存储到 zip 存档。
我正在使用 http://dotnetzip.codeplex.com我有代码示例:
using (ZipFile zip = new ZipFile())
{
zip.AddFile("text.txt");
zip.Save("Backup.zip");
}
而且我不想每次都创建临时文本.txt并将其压缩回去。我可以访问文本.txt作为 zip 文件中的流并将文本保存在那里吗?
DotNetZip 中有一个示例,它使用带有方法 AddEntry
的 Stream 。
String zipToCreate = "Content.zip";
String fileNameInArchive = "Content-From-Stream.bin";
using (System.IO.Stream streamToRead = MyStreamOpener())
{
using (ZipFile zip = new ZipFile())
{
ZipEntry entry= zip.AddEntry(fileNameInArchive, streamToRead);
zip.Save(zipToCreate); // the stream is read implicitly here
}
}
使用 LinqPad 进行的一些测试表明,可以使用 MemoryStream 来构建 zip 文件
。void Main()
{
UnicodeEncoding uniEncoding = new UnicodeEncoding();
byte[] firstString = uniEncoding.GetBytes("This is the current contents of your TextBox");
using(MemoryStream memStream = new MemoryStream(100))
{
memStream.Write(firstString, 0 , firstString.Length);
// Reposition the stream at the beginning (otherwise an empty file will be created in the zip archive
memStream.Seek(0, SeekOrigin.Begin);
using (ZipFile zip = new ZipFile())
{
ZipEntry entry= zip.AddEntry("TextBoxData.txt", memStream);
zip.Save(@"D:'temp'memzip.zip");
}
}
}
还有另一种接受文件路径作为参数的 DotNetZip 方法:
zip.RemoveEntry(entry);
zip.AddEntry(entry.FileName, text, ASCIIEncoding.Unicode);