web-dev-qa-db-fra.com

Le même volume ne peut pas être utilisé à la fois comme source et comme destination

Je crée des archives fractionnées en utilisant le code suivant:

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);
    }
}

Le code ci-dessus génère 3 fichiers: file.Zip, file.z01 and file.z02. Lorsque je clique avec le bouton droit sur ce fichier Zip et sélectionne Extract All (n'utilisant pas WinRAR ou un autre logiciel de compression pour extraire, juste le Zip Windows intégré), cela me donne l'erreur suivante:

Le même volume ne peut pas être utilisé à la fois comme source et comme destination

enter image description hereenter image description here

Ce qui est bizarre, c'est que cela ne se produit que la première fois que j'essaie d'extraire les fichiers, les extractions suivantes sont OK, donc ce doit être la façon dont les fichiers ont été zippés en premier lieu.

MISE À JOUR 1

La même chose se produit même si j'extrait dans un autre dossier

Il y a eu des discussions sur ce problème sur le site DotNetZip Codeplex, mais il semble que le problème ne soit pas encore résolu

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

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

MISE À JOUR 2

En regardant le document pour la propriété MaxOutputSegmentSize , il est cité:

Je ne crois pas que l'Explorateur Windows puisse extraire une archive fractionnée.

Il n'y a aucune autre explication quant à pourquoi. Je considère que c'est un faux positif car, comme mentionné ci-dessus,

cela ne se produit que la première fois que j'essaie d'extraire les fichiers, les extractions suivantes sont OK

J'utilise Windows 8.1 64 bits.

33
jmc

La première chose que vous voudriez toujours faire lorsque vous recherchez la raison de l'échec du logiciel est de localiser la source du message d'erreur. Vous faites cela en en utilisant d'abord Google . Le deuxième hit (en ce moment) est doré, quelqu'un a décompilé les exécutables Windows et localisé cette chaîne spécifique en tant qu'ID de ressource # 10209 dans un fichier nommé zipfldr.dll avec une notification de copyright Microsoft.

C'est une excellente correspondance, zipfldr.dll est l'extension d'espace de noms Shell que Windows utilise pour afficher le contenu d'un fichier .Zip comme s'il s'agissait d'un dossier. Vous pouvez le voir dans Regedit.exe, accédez à HKEY_CLASSES_ROOT\CLSID\ {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31} pour l'enregistrement principal. Le HKEY_CLASSES_ROOT\SystemFileAssociations\ .Zip\CLSID la clé de registre l'associe à un fichier .Zip.

Donc, vous avez un fait dur, c'est vraiment l'extension Explorer qui tombe. Bien sûr, vous ne pouvez pas faire grand-chose à ce sujet. Il ne reste plus qu'à douter que ce soit la bibliothèque Zip que vous utilisez qui tâtonne le contenu des fichiers étendus et provoque ainsi la chute de l'extension. Cela est considérablement réduit en voyant plus d'une bibliothèque déclencher cette erreur, les chances que les deux Ionic et Dotnetzip ont exactement le même bogue sont plutôt faibles. Non nul, les programmeurs ont tendance à avoir un "comment" ont-ils fait cela "jetez un œil au code d'un autre programmeur pour vous inspirer. Le fait que cette erreur soit fallacieuse met le clou dans le cercueil, vous vous attendez à ce qu'un mauvais contenu d'archive Zip déclenche une erreur à plusieurs reprises.

Vous pourriez être en mesure de rétroconcevoir le problème sous-jacent, vous le feriez avec SysInternals 'Process Monitor. Vous verrez l'Explorateur lire et écrire des fichiers. Probablement dans le répertoire TEMP, je suppose que vous obtiendrez une erreur comme celle-ci si un fichier .Zip existe déjà dans ce répertoire. TEMP est un dossier très salissant sur la plupart des machines, trop de programmes ne se nettoient pas correctement après eux-mêmes. Y compris les bibliothèques Zip, une théorie attrayante non appuyée par des preuves :)

Si cela ne fonctionne pas, l'ultime solution de rechange est Microsoft. Ils ont un numéro de téléphone 1-800 où vous pouvez obtenir de l'aide pour les problèmes avec leurs produits. Je l'ai utilisé plusieurs fois, ils ont toujours résolu mon problème et remboursé les frais initiaux. Il s'agit cependant d'un problème Windows, un produit qui compte un milliard d'utilisateurs. Vous obtiendrez, au mieux, une solution de contournement, un correctif logiciel réel est extrêmement improbable. Pas tout à fait impossible, c'est chose faite. Mais il y a de fortes chances pour que la solution de contournement recommandée soit "utiliser un utilitaire tiers comme Winzip". Pas ce que tu veux entendre.

15
Hans Passant

Veuillez déplacer le fichier Zip dans un autre dossier ou essayez d'utiliser 7Zip pour extraire les fichiers.

0
Edgar K