Добавляйте файлы в ZIP без путей, используя SharpZipLib - PullRequest
14 голосов
/ 17 января 2012

Мне нужно объединить 3 файла в 1 zip-файл и сделать его доступным для загрузки для пользователя.Я могу выполнить свое требование, кроме одного: он архивирует файлы во вложенные папки.

Например, мои файлы расположены следующим образом:

C:\TTCG\WebSites\Health\ABC.CSV
C:\TTCG\WebSites\Health\XYZ.CSV
C:\TTCG\WebSites\Health\123.CSV

Но в файле zip, он заархивирует файлы в папке, используя «TTCG \ WebSites \ Health \» в качестве пути.Пожалуйста, смотрите прикрепленный файл.

Example

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

Мои коды для создания zip-файла указаны ниже:

ZipFile z = ZipFile.Create(Server.MapPath("~" + @"\Accident.zip"));

//initialize the file so that it can accept updates
z.BeginUpdate();

//add the file to the zip file        
z.Add(Server.MapPath("~" + @"\ABC.csv"));
z.Add(Server.MapPath("~" + @"\XYZ.csv"));
z.Add(Server.MapPath("~" + @"\123.csv"));        

//commit the update once we are done
z.CommitUpdate();
//close the file
z.Close();

Ответы [ 3 ]

11 голосов
/ 17 января 2012

Исходя из часто задаваемых вопросов, вы должны вручную удалить путь к папке:

Как создать Zip-файл без папок?

Удалить часть пути имени файла, используемого для создания ZipEntry перед добавлением в ZipOutputStream

ZipEntry entry = new ZipEntry(Path.GetFileName(fullPath));

FAQ можно найти здесь .

Кажется, это ограничение библиотеки. Надеюсь, это поможет!

3 голосов
/ 26 августа 2013

Если у вас есть файлы в FileSystemInfo, вы можете использовать: z.Add(file.FullName, Path.GetFileName(file.FullName));

Это добавит ваши файлы в корневой каталог вашего почтового индекса.

1 голос
/ 06 мая 2013
z.Add(pathToFile, pathInZipFile);
...