2009-08-29 40 views
3

我使用SharpZipLib拉上了子目錄的文件夾,這是工作的罰款去掉無關的目錄名。我想這樣做的是剝離的第一個子文件,使整個結構是無關緊要的不攜帶着父母的目錄...C#SharpZipLib

例子:

C:\ A \ B \ C \ d。\ E \˚F\克\ħ\ FILE1.TXT

C:\ A \ b \ C \ d。\ E \˚F\克\ħ\ FILE2.TXT

C:\ A \ b \ C \ d。\ E \˚F\克\ħ\ I \ FILE1.TXT

C:\ A \ b \ C \ d。\ E \˚F\克\ħ\ I \ FILE2.TXT

應該結束這樣的:

FILE1.TXT

FILE2.TXT

I \ FILE1.TXT

I \ 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。