2009-08-29 38 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。