【问题标题】:How to add EmptyFolder or directory in a zip file using ZipOutputStream如何使用 ZipOutputStream 在 zip 文件中添加 EmptyFolder 或目录
【发布时间】:2011-01-11 12:56:18
【问题描述】:

我希望能够使用 ICSharpCode.SharpZipLib.Zip.ZipOutputStream 创建包含空文件夹的 zip 文件。我可以使用ICSharpCode.SharpZipLib.Zip.FastZip.CreateEmptyDirectories = true,但 FastZip 不允许使用 UTF8 文件名。

【问题讨论】:

    标签: c# zip sharpziplib


    【解决方案1】:

    我知道这已经很老了,但我遇到了同样的问题(使用 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);
            }
        }
    

    【讨论】:

      【解决方案2】:

      http://community.sharpdevelop.net/forums/p/10856/29901.aspx 哪里(我引用): “我们当前的路线图包括 UTF 条目文件名处理 [...]” 这会让我明白目前不支持 UTF 文件名。

      【讨论】:

      • 谢谢,我知道使用 ZipOutputStream 可以压缩 UTF8 名称的文件,但问题是我怎样才能允许压缩空文件夹??
      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多