Как сжать только файлы без папок с помощью библиотеки SharpZipLib?(С #) - PullRequest
2 голосов
/ 07 февраля 2011

Я использую следующий код для создания zip-файла:

var files = Directory.GetFiles(targetPath);
var zip = ZipFile.Create(targetPath + "/myzip.zip");
zip.BeginUpdate();
foreach (var file in files) zip.Add(file, CompressionMethod.Deflated);
zip.CommitUpdate();
zip.Close();

Я получаю следующую структуру архива:

myzip.zip
   - Folder1
      - Folder2
        - File1.txt
        - File2.txt
        - File3.txt

Но мне нужно:

myzip.zip
  - File1.txt
  - File2.txt
  - File3.txt

Помогите пожалуйста.

1 Ответ

6 голосов
/ 07 февраля 2011

Глядя на код SharpZipLib, есть класс в классе ZipFile, который, кажется, делает то, что вы хотите:

public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)

Вам просто нужно получить IStaticDataSource из файлаи создайте соответствующее entryName (которое не включает путь к каталогу), то есть найдите последний разделитель каталогов Path.DirectorySeparatorChar Field в file строке и все, что после этого должно быть только вашим именем файла.

[РЕДАКТИРОВАТЬ] Уточнение: я первоначально предложил Add(string file, string entryName), но отредактировал в вышеописанном методе, когда увидел, что OP указывает метод сжатия в вызове.Но метод сжатия по умолчанию для новых записей zip - CompressionMethod.Deflated, поэтому использование метода Add(string file, string entryName) должно дать тот же результат без необходимости получения IStaticDataSource.

...