ZipFile.ExtractToDirectory “Caractères illégaux dans le chemin”

Je veux décompresser un fichier avec la classe ZipFile en c # (VS2012). Même si je copie les chemins directement à partir de Win Explorer, j’obtiens cette erreur:

System.ArgumentException: Illegales Zeichen im Pfad. bei System.IO.Path.CheckInvalidPathChars (chemin de chaîne, contrôle booléen additif) bei System.IO.Path.GetFileName (chemin de chaîne) bei System.IO.Compression.ZipHelper. set_FullName (valeur de chaîne)
bei System.IO.Compression.ZipArchiveEntry..ctor (archive ZipArchive, ZipCentralDirectoryFileHeader cd) bei System.IO.Compression.ZipArchive.ReadCentralDirectory () de la part de System.IO.Compression.ZipArchive.get_Ensortinges (). .TraitementStructure.ExtractToDirectory (ZipArchive source, Ssortingng destinationDirectoryName) bei System.IO.Compression.ZipFile.ExtractToDirectory (env. .buttonStartNxtOSEK_Click (Expéditeur d’object, EventArgs e) dans d: \ C # \ nxtOSEKInstaller \ nxtOSEKSetup \ WindowsFormsApplication1 \ Form1.cs: Zeile 192.

Code:

ssortingng zipPath = @"D:\C#\nxtOSEKInstaller\nxtOSEKSetup\WindowsFormsApplication1\bin\Debug\res\package.zip"; ssortingng extractPath = @"D:\testcyginstall\cygwin"; textBoxProgress.AppendText("Entpacke .... "); try { ZipFile.ExtractToDirectory(zipPath, extractPath); } catch (System.ArgumentException ex) { textBoxProgress.AppendText("\n" + "Error\n" + ex.ToSsortingng()); return; } 

EDIT Problème résolu: Certains fichiers avec des noms de fichiers chinois dans le fichier zip étaient à l’origine du problème. C’est très frustrant lorsque l’exception ne génère pas le nom du chemin problématique.

Comme vous le savez déjà, certains caractères ne sont pas valides sous Windows:

\ /: *? “<> |

Cela apporterait de nombreuses situations lorsque votre application reçoit le zip d’un système d’exploitation différent, car certains de ces caractères non valides sont valides sous un autre système d’exploitation.

Afin de résoudre ce problème, vous pouvez nettoyer vos noms de fichiers avant de les extraire:

 public void ExtractZipFileToPath( ssortingng zipFilePath, ssortingng ouputPath ) { using (var zip = ZipFile.Read(zipFilePath)) { foreach (var entry in zip.Ensortinges.ToList()) { entry.FileName = SanitizeFileName(entry.FileName); entry.Extract(ouputPath); } } } 

Désinfecter les exemples ici Comment supprimer les caractères illégaux des chemins et des noms de fichiers?