c# - instalar - No se puede utilizar el mismo volumen como origen y destino
zip dll c# (1)
Lo primero que siempre querría hacer cuando busca la razón por la que el software falla es localizar el origen del mensaje de error. Lo haces utilizando Google primero . El segundo hit (ahora mismo) es dorado, somebody ha descompilado los ejecutables de Windows y ha localizado esta cadena específica como ID de recurso # 10209 en un archivo llamado zipfldr.dll
con una notificación de copyright de Microsoft.
Esa es una combinación excelente, zipfldr.dll es la extensión de espacio de nombres de shell que Windows usa para mostrar el contenido de un archivo .zip como si fuera una carpeta. Puede verlo en Regedit.exe, vaya a HKEY_CLASSES_ROOT/CLSID/ {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}
para el registro primario. La clave de registro HKEY_CLASSES_ROOT/SystemFileAssociations/ .zip/CLSID
asocia con un archivo .zip.
Entonces tiene un hecho difícil, realmente es la extensión Explorer la que se cae. Muy poco que puedes hacer sobre eso, por supuesto. Solo queda la duda de que podría ser la biblioteca Zip que usas que confunde el contenido de los archivos distribuidos y, por lo tanto, hace que la extensión se caiga. Eso se reduce significativamente al ver más de una biblioteca disparando este error, las probabilidades de que tanto Ionic como Dotnetzip tengan exactamente el mismo error son bastante bajas. No cero, los programadores tienden a tener un "cómo hicieron eso", se asoman al código de otros programadores en busca de inspiración. El hecho de que este error sea falso pone el clavo en el ataúd, esperarías que el contenido del archivo zip incorrecto disparara un error repetidamente.
Es posible que pueda aplicar ingeniería inversa al problema subyacente; lo haría con el Monitor de proceso de SysInternals. Verá Explorer leyendo y escribiendo archivos. Probablemente en el directorio TEMP, especulo que obtendrías un error como este si ya existe un archivo .zip en ese directorio. TEMP es una carpeta muy desordenada en la mayoría de las máquinas, demasiados programas no se limpian adecuadamente después de ellos mismos. Incluyendo las librerías zip, una teoría atractiva que no está respaldada por una prueba :)
Si eso no funciona, entonces la última alternativa es Microsoft. Tienen un número de teléfono 1-800 donde puede obtener asistencia para problemas con sus productos. Lo he usado varias veces, siempre resolvieron mi problema y me reembolsaron la tarifa inicial. Este es un problema de Windows, sin embargo, un producto que tiene mil millones de usuarios. En el mejor de los casos, obtendrá una solución alternativa, una solución de software real es extremadamente improbable. No es del todo imposible, ya se hizo. Pero hay muchas probabilidades de que su solución recomendada sea "usar una utilidad de terceros como Winzip". No es lo que quieres escuchar.
Estoy creando archivos divididos usando el siguiente código:
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);
}
}
El código anterior genera 3 archivos: file.zip, file.z01 and file.z02
. Cuando hago clic con el botón derecho en ese archivo zip y selecciono Extract All
(sin usar WinRAR u otro software de compresión para extraer, solo el zip integrado de Windows) me da el siguiente error:
El mismo volumen no se puede usar como fuente y destino
Lo extraño es que solo sucede la primera vez que trato de extraer los archivos, las extracciones posteriores están bien, por lo que debe ser la forma en que se comprimieron los archivos en primer lugar.
ACTUALIZACIÓN 1
Lo mismo sucede incluso si extraigo a una carpeta diferente
Ha habido discusiones con respecto a este problema en el sitio de DotNetZip Codeplex, pero parece que el problema aún no se ha resuelto
http://dotnetzip.codeplex.com/discussions/239172
http://dotnetzip.codeplex.com/discussions/371005
ACTUALIZACIÓN 2
Mirando el documento para la propiedad MaxOutputSegmentSize , se cita:
No creo que el Explorador de Windows pueda extraer un archivo dividido.
Sin embargo, no hay ninguna otra explicación de por qué. Considero que esto es un falso positivo ya que como se mencionó anteriormente,
solo sucede la primera vez que intento extraer los archivos, las extracciones siguientes están bien
Estoy usando Windows 8.1 de 64 bits.