C#SharpZipLib剥离不相关的目录名称
我正在使用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();
请改用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();
或者查看CodePlex for DotNetZip。