C#SharpZipLib
问题描述:
我使用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();
答
使用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上的DotNetZip。