При использовании DotNetZip столкнулся с непонятным поведением библиотеки если путь источник это весь диск ,например: c:\ или d:\

ZipFile zip = new ZipFile("d:\arhiv.zip", Encoding.UTF8);          
zip.RemoveSelectedEntries("*.xls");                       
zip.AddSelectedFiles("*", "c:\", "Arhive", true);
zip.Save();

В результате будет создан пустой архив. Начал копать, оказывается, в исходниках DotNetZIp в файле ZIpFile.Selector.cs авторы исправили авторский багрепорт под номером 9176 (проблема со слэшем ‘\’ в конце пути)

// workitem 9176
while (directoryOnDisk.EndsWith("\\")) directoryOnDisk = directoryOnDisk.Substring(0, directoryOnDisk.Length - 1);

После отработки directoryOnDisk = «C:», и функция выбора файлов возвращает пустой результат. Пришлось немного изменить изменить исходник, добавив:

// workitem 9176
//while (directoryOnDisk.EndsWith("\\")) directoryOnDisk = directoryOnDisk.Substring(0, directoryOnDisk.Length - 1);

if (directoryOnDisk.EndsWith("\\") && (directoryOnDisk.Trim().Length>3)
       directoryOnDisk = directoryOnDisk.Substring(0, directoryOnDisk.Length - 1);

Теперь все с корневого раздела данные ищутся как надо.

DotNetZip баг при сохранении данных с корневого раздела
Метки:    

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и соглашаюсь c политикой конфиденциальности *