Подтвердить что ты не робот

Тот же том не может использоваться как источник и назначение

Я создаю сплит-архивы, используя следующий код:

string filename = "FileName.pdf";
using (ZipFile zip = new ZipFile())
{
    zip.UseZip64WhenSaving = Zip64Option.Default;
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
    using (FileStream stream = new FileStream(temp, FileMode.Open))
    {
        zip.AddEntry(filename, stream);
        zip.MaxOutputSegmentSize = settings.AttachmentSize * (1024 * 1024);
        zip.Save(zipFileName);
    }
}

В приведенном выше коде генерируется 3 файла: file.zip, file.z01 and file.z02. Когда я щелкнул правой кнопкой мыши этот zip файл и выберите Extract All (не используя WinRAR или другое программное обеспечение для zip-копирования, которое можно извлечь, просто встроенный zip файл Windows), он вызывает следующую ошибку:

Тот же том не может использоваться как источник и пункт назначения

enter image description hereenter image description here

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

ОБНОВЛЕНИЕ 1

То же самое происходит, даже если я извлекаю в другую папку

В отношении этой проблемы обсуждались проблемы на сайте DotNetZip Codeplex, но, похоже, проблема еще не решена.

http://dotnetzip.codeplex.com/discussions/239172

http://dotnetzip.codeplex.com/discussions/371005

ОБНОВЛЕНИЕ 2

Глядя на документ для свойства MaxOutputSegmentSize, он цитируется:

Я не считаю, что Windows Explorer может извлечь разделенный архив.

Больше никаких объяснений, почему. Я считаю это ложноположительным, поскольку, как упоминалось выше,

это происходит только в первый раз, когда я пытаюсь извлечь файлы, последующие экстракции ОК

Я использую 64-разрядную версию Windows 8.1.

4b9b3361

Ответ 1

Первое, что вы всегда хотели бы найти при поиске причины сбоя программного обеспечения, - это поиск источника сообщения об ошибке. Вы делаете это с помощью с использованием Google в начале. Второй хит (прямо сейчас) является золотым, кто-то декомпилировал исполняемые файлы Windows и разместил эту конкретную строку в качестве идентификатора ресурса # 10209 в файле с именем zipfldr.dll с уведомлением об авторском праве Microsoft.

Это отличное совпадение, zipfldr.dll - это расширение пространства имен оболочки, которое Windows использует для отображения содержимого .zip файла, как будто это папка. Вы можете увидеть его в Regedit.exe, перейдите к HKEY_CLASSES_ROOT\CLSID\ {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31} для первичной регистрации. Раздел реестра HKEY_CLASSES_ROOT\SystemFileAssociations\ .zip\CLSID связывает его с .zip файлом.

Таким образом, у вас есть жесткий факт, на самом деле это расширение Explorer, которое падает. Чрезвычайно мало что можно сделать по этому поводу. Остается только сомневаться, что это может быть используемая вами библиотека Zip, которая искажает содержимое натянутых файлов и, следовательно, приводит к падению расширения. Это значительно сократилось, если более чем одна библиотека отключила эту ошибку, вероятность того, что и Ionic, и Dotnetzip имеет ту же ошибку, довольно низкая. Не нуль, программисты, как правило, имеют "как они это делают" заглядывают в другой код программиста для вдохновения. Тот факт, что эта ошибка является ложной, помещает гвоздь в гроб, вы ожидаете, что плохой архив zip-архива будет неоднократно прерывать ошибку.

Возможно, вы сможете перепрофилировать основную проблему, вы сделали бы это с помощью SysInternals Process Monitor. Вы увидите файлы для чтения и записи Explorer. Возможно, в каталоге TEMP я предполагаю, что вы получите такую ​​ошибку, если в этом каталоге уже существует .zip файл. TEMP - очень грязная папка на большинстве машин, слишком много программ не очищаются должным образом после себя. В том числе zip-библиотеки, привлекательная теория, не подкрепленная доказательством:)

Если это не закончится, то окончательным откатом является Microsoft. У них есть номер телефона 1-800, где вы можете получить поддержку в проблемах с их продуктами. Я использовал его несколько раз, они всегда решали мою проблему и возвращали авансовый взнос. Это проблема Windows, но продукт, в котором есть миллиард пользователей. Вы, в лучшем случае, получите обходное решение, реальное программное исправление крайне маловероятно. Не совсем невозможно, это было сделано. Но очень высокие шансы, что их рекомендуемое решение - "использовать стороннюю утилиту, такую ​​как Winzip". Не то, что вы хотите услышать.

Ответ 2

Пожалуйста, переместите zip файл в другую папку или попробуйте использовать 7zip для распаковки файлов.