всем спасибо нашел решение.. решил не создавать велосипед и воспользовался чужим!
public void CreateSample(string outPathname, List<String> contents, string cucle)
{
FileStream fsOut = File.Create(outPathname);
ZipOutputStream zipStream = new ZipOutputStream(fsOut);
zipStream.SetLevel(3); //0-9, 9 что является самым высоким уровнем сжатия
// zipStream.Password = password; // необязательный
foreach (string filename in contents)
{
string entryName = StrippedFilename(filename);
ZipEntry newEntry = new ZipEntry(cucle);
newEntry.DateTime = DateTime.Now;
// Использование Офф разрешить почтовый быть распакованы XP встроенный в экстрактор и другими взрослыми
// Код. Использование С или динамический, если файл будет больше, чем 4 ГБ.
zipStream.UseZip64 = UseZip64.Off;
zipStream.PutNextEntry(newEntry);
// распакуйте файл в буфер куски. 4K является оптимальной
byte[] buffer = new byte[4096];
FileStream streamReader = File.OpenRead(filename);
int n;
long progress = 0;
do
{
n = streamReader.Read(buffer, 0, buffer.Length);
progress += n;
// Здесь вы можете делать обновления состояния
// Прогресс имеет количество байт до сих пор
zipStream.Write(buffer, 0, n);
} while (n > 0);
zipStream.CloseEntry();
}
zipStream.IsStreamOwner = true; // Делает Закрыть Закрыть также основных потока
zipStream.Close();
}
// Удалите диск из названия, например "C:\temp\file.txt" -> "temp\file.txt"
// Многие утилиты объект на наличие диска в пути.
private string StrippedFilename(string filename)
{
string pathroot = Path.GetPathRoot(filename);
return filename.Substring(pathroot.Length);
}
тестируем
public void TestBuild() {
List<String> contents = new List <string>();
contents.Add(@"c:\temp\test1.txt");
contents.Add(@"c:\temp\test2.txt");
contents.Add(@"c:\temp\test3.txt");
CreateSample(@"c:\temp\empty-test.zip", "whatever", contents);
}