Partager via


Atténuation : Séparateur de chemin ZipArchiveEntry.FullName

À compter des applications qui ciblent .NET Framework 4.6.1, le séparateur de chemin utilisé dans la ZipArchiveEntry.FullName propriété a changé de la barre oblique inverse (« \ ») utilisée dans les versions précédentes de .NET Framework à une barre oblique (« / »). Les objets System.IO.Compression.ZipArchiveEntry sont créés en appelant l’une des surcharges de la méthode ZipFile.CreateFromDirectory.

Répercussion

La modification rend l’implémentation .NET conforme à la section 4.4.17.1 de la spécification du format de fichier .ZIP et permet aux fichiers .ZIP d’être décompressés sur des systèmes autres que Windows.

Décompresser un fichier zip créé par une application qui cible une version précédente de .NET Framework sur des systèmes d’exploitation non Windows tels que MacOS ne parvient pas à conserver la structure de répertoires. Par exemple, sur MacOS, il crée un ensemble de fichiers dont le nom de fichier concatène le chemin du répertoire, les barres obliques inversées (« \ ») ainsi que le nom de fichier. Par conséquent, la structure de répertoires des fichiers décompressés n’est pas conservée.

L’impact de cette modification sur les fichiers .ZIP qui sont compressés sur le système d’exploitation Windows par API dans l’espace de noms .NET Framework System.IO doit être minimal, car ces API peuvent gérer en toute transparence une barre oblique (« / ») ou une barre oblique inverse (« \ ») comme caractère de séparateur de chemin.

Atténuation

Si ce comportement n’est pas souhaitable, vous pouvez désactiver l’option en ajoutant un paramètre de configuration à la <section runtime> de votre fichier de configuration d’application. L’exemple suivant montre à la fois la <runtime> section et le commutateur d’opt-out.

<runtime>  
   <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=true" />  
</runtime>  

En outre, les applications qui ciblent les versions précédentes de .NET Framework, mais qui s’exécutent sur .NET Framework 4.6.1 et versions ultérieures, peuvent opter pour ce comportement en ajoutant un paramètre de configuration à la <section runtime> du fichier de configuration de l’application. L’exemple suivant montre à la fois la <runtime> section et le commutateur d’opt-in.

<runtime>  
   <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=false" />  
</runtime>  

Voir aussi