2015-11-12 2 views
0

Я использую библиотеку DotNetZip для сжатия файлов. мой код приведен нижеИспользование DotNetZip

String[] filenames = { "D:\\Data\\ReadMe.txt", "c:\\data\\collection.csv","c:\\ProgramFiles\\reports AnnualSummary.pdf"}; 
using (ZipFile zip = new ZipFile()) 
{ 
    zip.AddFiles(filenames, "files"); 
    zip.Save("Archive.zip"); 
} 

Теперь, когда Archive.zip создается, есть папки, созданные в архиве с тем же именем (например, данные, ProgramFiles и т.д.) для файлов, в которых они хранились.

Моя цель - сжать все файлы в Archive.zip без какой-либо папки в архиве. как я могу это достичь?

+0

Возможно, попробуйте использовать https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx, если вы находитесь на .net 4.5+ – juFo

ответ

0

The AddFiles имеет перегрузку, чтобы сгладить структуру каталогов в зип архиве

public void AddFiles(
    IEnumerable<string> fileNames, 
    bool preserveDirHierarchy, 
    string directoryPathInArchive 
) 

http://dotnetzip.herobo.com/DNZHelp/html/c64e89d3-2f1f-2886-16bc-291746b46718.htm

zip.AddFiles(filenames, false, "files"); 

Второй параметр preserveDirHierarchy может быть передан как ложь, чтобы все файлы в корне архив zip. Будьте осторожны, если у вас нет файлов с тем же именем при этом. Он будет генерировать исключение для дубликатов имен файлов.