C# 可以创建受zip密码保护的文件,而无需先创建文件,然后再进行压缩
我正在将数据写入文本文件并使用以下代码C# 可以创建受zip密码保护的文件,而无需先创建文件,然后再进行压缩,c#,dotnetzip,C#,Dotnetzip,我正在将数据写入文本文件并使用以下代码 await using var file = new StreamWriter(filePath); foreach (var packet in resultPackets) { file.WriteLine(JsonConvert.SerializeObject(packet)); } 我正在使用下面的代码压缩文件,并使用“DotNetZip”进行密码保护 using (Zi
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:\tmp\data4.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
如何不创建任何形式的临时文件。相反,在保存归档文件时,将读取流的内容并将其放入归档文件中的压缩文件中。但是,请注意,在将归档文件写入磁盘之前,文件的全部内容都已完全保存在内存中。根据说明,您应该能够zip.AddEntry(“file_name.txt”,stream)
,其中流
也可以是内存流
。您可以使用ZipFile.AddEntry()
方法(有重载可直接从字符串
内容或从流
-甚至可能是内存流
)创建文件。但是请注意,如果需要的话,没有任何东西会停止实现(AFAIK!),最终创建一个临时文件。不管您在其他评论中提到的路径是什么,我相信过程都是一样的。必须先压缩文件/数据,然后才能进行压缩和保护。使用内存流可能是避免在磁盘上创建文件的最佳途径。谢谢@Carsten。谢谢。