архивирование с помощью c # - PullRequest
4 голосов
/ 24 марта 2010

Я пытаюсь использовать GZipStream для создания файла gz, используя c #.Моя проблема в том, что у меня есть список, который содержит строки.и мне нужно создать zip-файл, защищенный паролем, и поместить в него текстовый файл, содержащий строки.
Я не хочу создавать текстовый файл, затем сжать его, а затем удалить текстовый файл.я хочу напрямую создать защищенный паролем почтовый файл, который содержит текстовый файл.
любая помощь?

РЕДАКТИРОВАТЬ: я сделал с молнией.Теперь мне нужно установить пропуск для созданного файла ZIP.любая помощь?

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

Вам следует рассмотреть возможность использования SharpZipLib . Это библиотека сжатия с открытым исходным кодом .net. Он включает примеры того, как создать файл .gz или .zip. Обратите внимание, что вы можете написать прямо в .zip файл. Вам не нужно сначала создавать промежуточный файл на диске.

Редактировать: (в ответ на ваши изменения) SharpZipLib также поддерживает пароли zip.

3 голосов
/ 24 марта 2010

Просто создайте StreamWriter упаковку GZipStream и напишите в него текст.

0 голосов
/ 25 марта 2010

GZipStream может использоваться для создания файла .gz, но это не то же самое, что файл .zip.

Для создания защищенных паролем zip-файлов, я думаю, вам нужно перейти в стороннюю библиотеку.

Вот как это сделать, используя DotNetZip ...

var sb = new System.Text.StringBuilder();
sb.Append("This is the text file...");
foreach (var item in listOfStrings)
    sb.Append(item);

// sb now contains all the content that will be placed into
// the text file entry inside the zip.

using (var zip = new Ionic.Zip.ZipFile())
{
    // set the password on the zip (implicitly enables encryption)
    zip.Password = "Whatever.You.Like!!"; 
    // optional: select strong encryption
    zip.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256;
    // add an entry to the zip, specify a name, specify string content
    zip.AddEntry("NameOfFile.txt", sb.ToString());
    // save the file
    zip.Save("MyFile.zip");
}
...