2010-03-24 2 views
4

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

EDIT: Я закончил работу с застежкой-молнией. теперь мне нужно установить проход для созданного zip-файла. любая помощь?

+1

Как примечание стороны, 'GZipStream' не создает .zip файлы, он создает .gz файлы. Я предполагаю, что это то, что вы на самом деле хотите сейчас; если нет, исправьте вопрос соответствующим образом. –

+0

@scatman: Если на этот вопрос был дан ответ, отметьте ответ, который вы приняли. Если у вас другой вопрос, используйте кнопку «Задать вопрос», чтобы начать новый вопрос. Спасибо – NotMe

+0

@scatman - Sharpziplib поддерживает пароли – Keltex

ответ

3

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

Редактировать: (в ответ на ваше редактирование) SharpZipLib также поддерживает почтовые пароли.

+0

Согласен ... эта библиотека хорошо работает и хорошо вписывается в .NET-идиому. – harpo

3

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

0

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