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

je suis de la création de split archives 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. Quand je clic droit sur ce fichier zip et sélectionnez Extract All (pas à l'aide de WinRAR ou autre logiciel de compression zip pour extraire, juste le Windows intégré zip), il me donne l'erreur suivante:

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

enter image description hereenter image description here

Ce qui est bizarre c'est que ça n'arrive que la première fois que j'essaie d'extraire les fichiers, les extractions suivantes sont correctes donc ça doit être la façon dont les fichiers ont été zippés en premier lieu.

UPDATE 1

la même chose se produit même si j'extrait vers un dossier différent

il y a eu des discussions à ce sujet sur le site DotNetZip Codeplex, mais il semble que la question n'ait pas encore été résolue

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

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

UPDATE 2

en regardant le doc pour le MaxOutputSegmentSize propriété, il est cité:

Je ne crois pas que Windows Explorer puisse extraire une archive fractionnée.

Il n'y a aucune autre explication que la raison pour laquelle. Je considère c'est là un faux-positif puisque, comme mentionné ci-dessus,

cela n'arrive que la première fois que j'essaie d'extraire les fichiers, le les extractions réussies sont OK

J'utilise Windows 8.1 64-bit.

31
demandé sur Magnus Karlsson 2015-07-08 10:56:28

1 réponses

la première chose que vous voulez toujours faire lorsque vous cherchez la raison pour laquelle le logiciel échoue est de localiser la source du message d'erreur. Vous ne faites que par utiliser Google en premier. Deuxième coup (pour le moment) est d'or, quelqu'un a décompressé les exécutables Windows et a localisé cette chaîne de caractères en tant que ressource ID #10209 dans un fichier nommé zipfldr.dll avec une notification de copyright de Microsoft.

C'est un excellent match, zipfldr.dll est l'extension de l'espace de noms de shell que Windows utilise pour afficher le contenu d'un .fichier zip que c'est un dossier. Vous pouvez le voir dans Regedit.exe, accédez à HKEY_CLASSES_ROOT\CLSID\ {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31} pour l'enregistrement primaire. HKEY_CLASSES_ROOT\SystemFileAssociations\ .zip\CLSID la clé de registre l'associe à A.fichier zip.

donc vous avez un fait difficile, c'est vraiment L'extension Explorer qui tombe. Vous ne pouvez pas faire grand-chose à ce sujet, bien sûr. Il ne reste que le doute que ce pourrait être la bibliothèque Zip que vous utilisez qui trompe le contenu des fichiers et provoque ainsi le extension pour tomber. Cela est considérablement réduit en voyant plus d'une bibliothèque déclencher cette erreur, la probabilité que Ionic et Dotnetzip aient le même bug est plutôt faible. Pas zéro, les programmeurs ont tendance à avoir un "comment ont-ils fait cela" jeter un oeil au code d'un autre programmeur pour l'inspiration. Le fait que cette erreur soit fausse met le clou dans le cercueil, vous vous attendriez à ce que le mauvais contenu d'archive zip déclenche une erreur à plusieurs reprises.

Vous être capable de l'ingénierie inverse du problème sous-jacent, vous le feriez avec le moniteur de processus de SysInternals. Vous verrez L'Explorateur lire et écrire des fichiers. Probablement dans le répertoire TEMP, je suppose que vous obtiendriez une erreur comme celle-ci si a.le fichier zip existe déjà dans ce répertoire. TEMP est un dossier très désordonné sur la plupart des machines, trop de programmes ne nettoient pas correctement après eux-mêmes. Y compris zip bibliothèques, une belle théorie qui n'est pas autrement soutenu par la preuve :)

si cela ne fonctionne pas hors alors L'ultime repli est Microsoft. Ils ont un numéro de téléphone 1-800 où vous pouvez obtenir de l'aide pour des problèmes avec leurs produits. Je l'ai utilisé plusieurs fois, ils ont toujours résolu mon problème et remboursé les frais initiaux. C'est un problème Windows cependant, un produit qui a un milliard d'utilisateurs. Vous aurez, au mieux, une solution de contournement, une VRAIE solution logicielle est extrêmement improbable. Pas totalement impossible, il a été fait. Mais très forte probabilité que leur solution recommandée est " utiliser un 3ème parti utilitaire comme Winzip". Pas ce que vous voulez entendre.

14
répondu Hans Passant 2015-07-10 12:05:13