Создание дерева виртуальных каталогов в zip-файле с помощью dotnetzip

Я пытаюсь создать zip-файл из кода, я использую dotnetzip

Я хочу создать дерево каталогов в папке, которой нет на диске. Как мне это сделать?

Я пробовал использовать AddDirectory, но мне кажется, он хочет найти каталог на диске. Я также пробовал AddEntry, но для этого требуется некоторый контент.

Мои файлы хранятся на SQL Server с использованием опции FileStream и там организованы в иерархию.

Я написал этот рекурсивный метод для этого, но строка AddDirectory не работает.

    private void GetFiles(ZipFile zipFile, Folder folder, string path)
    {
        zipFile.AddDirectory(folder.FolderName, path);

        foreach (var file in folder.Files)
            zipFile.AddEntry(file.FileName, file.FileData);

        foreach(var subfolder in folder.SubFolders)
        {
            GetFiles(zipFile, subfolder, path + "\\" + subfolder.FolderName);
        }
    }

person Rob Stevenson-Leggett    schedule 23.09.2011    source источник


Ответы (2)


Для создания новый каталог в zip-файле вместо импорта каталога

person harold    schedule 23.09.2011

На их странице с примерами кажется, что если вы укажете полный путь к файлу, он добавит запись в ZIP, соответствующую этому пути .. поэтому вы можете попробовать просто добавить файлы с полным путем и пропустить шаг AddDirectory .. По крайней мере, это вот что я смог почерпнуть из этого примера кода в их документации:

Добавьте набор элементов в zip-файл, указав общий каталог в zip-архиве. В этом примере добавляются записи в zip-файл. Каждая запись добавляется с использованием указанного пути.

 String[] filenames = { "ReadMe.txt", "c:\\data\\collection.csv", "c:\\reports\\AnnualSummary.pdf"};
  using (ZipFile zip = new ZipFile())
  {
    zip.AddFiles(filenames, "files");
    zip.Save("Archive.zip");
  }
person Anas Karkoukli    schedule 23.09.2011
comment
Анас прав, новое имя папки будет создано с использованием второго параметра метода AddFiles (). Нет необходимости использовать AddDirectory () - person Rhys Stephens; 22.01.2016