Как добавить папку в zip-архив с помощью ICSharpCode.SharpZipLib

Я должен создать две папки внутри zip-файла, который я создаю программно, используя 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;
        }
    }

как создать каталог с помощью ZipEntry и как добавить файлы в каталог, расположенный внутри Zip архив?

3 ответов


Я понял это:

  • вы можете просто сделать new ZipEntry("Folder1/Archive.txt"); и new ZipEntry("Folder2/Archive2.txt");

ответ выше будет работать для нескольких сценариев, но он не будет работать, когда вы хотите добавить пустую папку в 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, и поместите косую черту в конце. Это работает. Я проверить его.


лучшим решением в нашем проекте было перейти на путь лучше

https://dotnetzip.codeplex.com

https://github.com/haf/DotNetZip.Semverd

методы более прямолинейны в использовании