8

を使用してプログラムで作成した zip ファイル内に 2 つのフォルダーを作成する必要がありますICSharpCode.SharZipLib.Zip。したい:

    private void AddToZipStream(byte[] inputStream, ZipOutputStream zipStream, string fileName, string fileExtension)
    {
        var courseName = RemoveSpecialCharacters(fileName);

        var m_Bytes = inputStream;
        if ((m_Bytes != null) && (zipStream != null))
        {
            var newEntry = new ZipEntry(ZipEntry.CleanName(string.Concat(courseName, fileExtension)));
            newEntry.DateTime = DateTime.Now;
            newEntry.Size = m_Bytes.Length;

            zipStream.PutNextEntry(newEntry);
            zipStream.Write(m_Bytes, 0, m_Bytes.Length);
            zipStream.CloseEntry();
            zipStream.UseZip64 = UseZip64.Off;
        }
    }

を使用してディレクトリを作成する方法と、 ZipアーカイブZipEntry内にあるディレクトリにファイルを追加する方法を教えてください。

4

3 に答える 3

17

私はそれを考え出した:

  • あなたは簡単に行うことができnew ZipEntry("Folder1/Archive.txt");ますnew ZipEntry("Folder2/Archive2.txt");
于 2013-08-21T18:02:48.843 に答える
4

上記の答えはいくつかのシナリオで機能しますが、zip ファイルに空のフォルダーを追加する場合は機能しません。

SharpZipLib コードを調べたところ、フォルダーを作成するために必要なのは、ZipEntry 名の末尾の「/」スラッシュだけであることがわかりました。

ライブラリのコードは次のとおりです。

public bool IsDirectory {
    get {
        int nameLength = name.Length;
        bool result =
            ((nameLength > 0) &&
            ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) ||
            HasDosAttributes(16)
            ;
        return result;
    }
}

そのため、ZipEntry を使用してファイルであるかのようにフォルダーを作成し、最後にスラッシュを付けます。できます。私はそれをテストしました。

于 2016-07-30T08:09:34.973 に答える