Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以创建受zip密码保护的文件,而无需先创建文件,然后再进行压缩_C#_Dotnetzip - Fatal编程技术网

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。谢谢。