1

を使用して、空のフォルダーを含む zip ファイルを作成できるようにしたいと考えています ICSharpCode.SharpZipLib.Zip.ZipOutputStream。を使用できますICSharpCode.SharpZipLib.Zip.FastZip.CreateEmptyDirectories = trueが、FastZip では UTF8 ファイル名を使用できません。

4

2 に答える 2

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);
        }
    }
于 2017-08-23T18:36:10.063 に答える
0

http://community.sharpdevelop.net/forums/p/10856/29901.aspxを参照してください(引用します): 「現在のロードマップには UTF エントリ ファイル名の処理が含まれています [...]」は現在サポートされていません。

于 2011-01-11T13:01:16.237 に答える