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 propriété ZipArchiveEntry.FullName a été changé. Il ne s’agit plus de la barre oblique inverse (« \ ») utilisée dans les versions antérieures du .NET Framework, mais de la barre oblique (« / »). Les objets System.IO.Compression.ZipArchiveEntry sont créés en appelant l’une des surcharges de la méthode ZipFile.CreateFromDirectory.

Impact

L’implémentation .NET est ainsi conforme à la section 4.4.17.1 des Spécifications relatives au format des fichiers ZIP et permet aux archives ZIP d’être décompressées sur des systèmes non Windows.

La décompression d’un fichier zip créé par une application qui cible une version antérieure du .NET Framework sur les systèmes d’exploitation non-Windows, tels que les ordinateurs MacOS, ne permet pas de conserver la structure de répertoire. Par exemple, pour les ordinateurs MacOS, cela crée un ensemble de fichiers dont le nom concatène le chemin, la barre oblique inverse (« \ »), et 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 ce changement sur les fichiers .ZIP qui sont décompressés sur le système d’exploitation Windows par les API dans l’espace de noms System.IO du .NET Framework doit être minimal, étant donné que ces API peuvent gérer sans problème aussi bien une barre oblique (« / ») qu’une barre oblique inverse (« \ ») comme séparateur de chemin.

Limitation des risques

Si ce comportement n’est pas souhaitable, vous pouvez choisir de l’annuler en ajoutant un paramètre de configuration pour la section <runtime> du fichier de configuration de votre application. L’exemple suivant montre la section <runtime> et l’option d’annulation.

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

De plus, les applications qui ciblent des versions antérieures du .NET Framework mais qui s’exécutent sur .NET Framework 4.6.1 ou les versions ultérieures peuvent accepter ce comportement en ajoutant un paramètre de configuration à la section <runtime> du fichier de configuration de l’application. L’exemple suivant montre la section <runtime> et l’option d’activation.

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

Voir aussi