2009-08-29 2 views
3

Я использую SharpZipLib, чтобы закрепить папку с подкаталогами, и это работает нормально. То, что я хотел бы сделать это сдирать родителей каталоги первый дочерний файл так всю структуру, которая не имеет отношения не пронесло ...C# SharpZipLib разделяет нерелевантные имена каталогов

Пример:

C: \ а \ Ь \ с \ д \ е \ е \ г \ ч file1.txt \

C: \ A \ B \ C \ d \ е \ е \ г \ ч file2.txt \

C: \ а \ Ь \ с \ д \ е \ г \ \ ч \ я \ file1.txt

C: \ A \ B \ C \ d \ е \ г \ \ ч \ я \ file2.txt

Это должно в конечном итоге, как это:

file1.txt

file2.txt

я \ file1.txt

я \ file2.txt

Как можно Я делаю это?

Вот код, который я до сих пор:

 ZipFile zipFile = new ZipFile(destinationArchive); 

     zipFile.BeginUpdate(); 
     foreach (FileInfo file in sourceFiles) 
     { 
      zipFile.Add(file.FullName); 
     } 
     zipFile.CommitUpdate(); 

     zipFile.Close(); 

ответ

2

Используйте ZipOutputStream вместо:

string[] sourceFiles = new [] { @"c:\a\b\c\d\e\f\g\h\file1.txt", @"c:\a\b\c\d\e\f\g\h\i\file1.txt" }; 
FileStream fileStream = File.Create(@"c:\temp\test.zip"); 
ZipOutputStream zipOut = new ZipOutputStream(fileStream); 
string baseDir = @"c:\a\b\c\d\e\f\g\h\"; 
foreach (var sourceFile in sourceFiles) 
{ 
    ZipEntry entry = new ZipEntry(sourceFile.Replace(baseDir,"")); 
    zipOut.PutNextEntry(entry); 

    FileStream inFile = File.OpenRead(sourceFile); 
    byte[] buffer = new byte[8192]; 
    int bytesRead = 0; 
    while ((bytesRead = inFile.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     zipOut.Write(buffer,0,bytesRead); 
    } 
    zipOut.CloseEntry();     
} 
zipOut.Close(); 
1

Или посмотрите на CodePlex для DotNetZip.

Смежные вопросы