【发布时间】:2011-01-11 12:56:18
【问题描述】:
我希望能够使用 ICSharpCode.SharpZipLib.Zip.ZipOutputStream 创建包含空文件夹的 zip 文件。我可以使用ICSharpCode.SharpZipLib.Zip.FastZip.CreateEmptyDirectories = true,但 FastZip 不允许使用 UTF8 文件名。
【问题讨论】:
标签: c# zip sharpziplib
我希望能够使用 ICSharpCode.SharpZipLib.Zip.ZipOutputStream 创建包含空文件夹的 zip 文件。我可以使用ICSharpCode.SharpZipLib.Zip.FastZip.CreateEmptyDirectories = true,但 FastZip 不允许使用 UTF8 文件名。
【问题讨论】:
标签: c# zip sharpziplib
我知道这已经很老了,但我遇到了同样的问题(使用 ZipOutputStream 压缩空目录)。
我正在根据不同的父目录进行递归调用。
public void CompressFolder(string path, ZipOutputStream zipStream, int folderOffset)
{
var files = Directory.GetFiles(path);
var directories = Directory.GetDirectories(path);
//this is where I add the empty directory
//code begin
if (files.Count() == 0 && directories.Count() == 0)
{
DirectoryInfo di = new DirectoryInfo(path);
string cleanName = ZipEntry.CleanName(path.Substring(folderOffset)) + "/";
ZipEntry zipEntry = new ZipEntry(cleanName);
zipEntry.DateTime = di.LastWriteTime;
zipStream.PutNextEntry(zipEntry);
zipStream.CloseEntry();
return;
}
//code end
foreach (string file in files)
{
FileInfo fileInfo = new FileInfo(file);
string cleanName = ZipEntry.CleanName(file.Substring(folderOffset));
ZipEntry zipEntry = new ZipEntry(cleanName);
zipEntry.DateTime = fileInfo.LastWriteTime;
zipEntry.Size = fileInfo.Length;
zipStream.PutNextEntry(zipEntry);
byte[] numArray = new byte[4096];
using (FileStream fileStream = File.OpenRead(file))
{
StreamUtils.Copy(fileStream, zipStream, numArray);
}
zipStream.CloseEntry();
}
foreach (string directory in directories)
{
CompressFolder(directory, zipStream, folderOffset);
}
}
【讨论】:
见http://community.sharpdevelop.net/forums/p/10856/29901.aspx 哪里(我引用): “我们当前的路线图包括 UTF 条目文件名处理 [...]” 这会让我明白目前不支持 UTF 文件名。
【讨论】: