C# 如何使用ZipOutStream在zip文件中添加EmptyFolder或目录

C# 如何使用ZipOutStream在zip文件中添加EmptyFolder或目录,c#,zip,sharpziplib,C#,Zip,Sharpziplib,我希望能够使用ICSharpCode.SharpZipLib.zip.ZipOutputStream创建包含空文件夹的zip文件。我可以使用ICSharpCode.SharpZipLib.Zip.FastZip.CreateEmptyDirectories=true,但FastZip不允许使用UTF8文件名。请参见此处(我引用): “我们当前的路线图包括UTF条目文件名处理[…]” 这会让我明白,UTF文件名目前不受支持。请参见此处(我引用): “我们当前的路线图包括UTF条目文件名处理[…]”

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

请参见此处(我引用): “我们当前的路线图包括UTF条目文件名处理[…]” 这会让我明白,UTF文件名目前不受支持。

请参见此处(我引用): “我们当前的路线图包括UTF条目文件名处理[…]”
这会让我明白,UTF文件名目前不受支持。

我知道这很旧,但我遇到了同样的问题(使用ZipoutStream压缩空目录)

我正在基于不同的父目录进行递归调用

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);
        }
    }

我知道这很老了,但我遇到了同样的问题(用ZipoutStream压缩空目录)

我正在基于不同的父目录进行递归调用

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);
        }
    }

Thanx,我知道使用ZipoutStream我们可以压缩UTF8名称的文件,但问题是如何允许压缩空文件夹??Thanx,我知道使用ZipoutStream我们可以压缩UTF8名称的文件,但问题是如何允许压缩空文件夹??