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

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

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 или другое программное обеспечение zipping для извлечения, только встроенный Windows zip) это дает мне следующую ошибку:

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

enter image description hereenter image description here

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

обновление 1

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

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

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

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

обновление 2

глядя на doc для MaxOutputSegmentSize свойство, оно закавычено:

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

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

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

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

1 ответов


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

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

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

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

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