可以创建受zip密码保护的文件,而无需先创建文件,然后将其压缩



>我正在将数据写入文本文件并使用以下代码,

await using var file = new StreamWriter(filePath);
foreach (var packet in resultPackets)
{
file.WriteLine(JsonConvert.SerializeObject(packet));
}

我正在使用以下代码来压缩文件,并使用"DotNetZip"进行密码保护,

using (ZipFile zip = new ZipFile())
{
zip.Password = "password";
zip.AddFile(filePath);
zip.Save(@"C:tmpdata4.zip");
}

有没有办法将两者结合起来,我想即时创建一个受密码保护的文件。

我没有

  • 想要创建第一个包含数据的文件,T
  • 然后从中创建zip文件
  • 并删除基本文件

这可能吗?谢谢!

好的,既然这还没有答案,这里有一个小程序可以为我完成这项工作:

using (var stream = new MemoryStream())
using (var streamWriter = new StreamWriter(stream))
{
// Insert your code in here, i.e.
//foreach (var packet in resultPackets)
//{
//   streamWriter.WriteLine(JsonConvert.SerializeObject(packet));
//}
// ... instead I write a simple string.
streamWriter.Write("Hello World!");
// Make sure the contents from the StreamWriter are actually flushed into the stream, then seek the beginning of the stream.
streamWriter.Flush();
stream.Seek(0, SeekOrigin.Begin);
using (ZipFile zip = new ZipFile())
{
zip.Password = "password";
// Write the contents of the stream into a file that is called "test.txt"
zip.AddEntry("test.txt", stream);
// Save the archive.
zip.Save("test.zip");
}
}

请注意AddEntry如何不创建任何形式的临时文件。相反,在保存存档时,流的内容将被读取并放入存档中的压缩文件中。但是,请注意,在将存档写入磁盘之前,文件的全部内容将完全保留在内存中。

最新更新