user584018
user584018

Reputation: 11304

Is possible to create zip password protected file without first creating file, then zip it

I am writing data into text file and using below code,

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

And I am using below code to zip the file with password protected using `DotNetZip,

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

Is there a way to combined both, I want to create a file on the fly as password protected.

I don't

Is this possible? Thanks!

Upvotes: 2

Views: 1496

Answers (1)

Carsten
Carsten

Reputation: 11606

Okay, so since this is still unanswered, here's a small program that does the job for me:

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");
    }
}

Note how AddEntry does not create any form of temporary file. Instead, when the archive is saved, the contents of the stream are read and put into a compressed file within the archive. However, be aware that the whole content of the file are completely kept in memory before it the archive is written to the disk.

Upvotes: 2

Related Questions