Donc, bizarre, je peux décompresser un fichier un ami fait sous Windows. Ce qu'il donne est étrange et incorrect d'une manière que je n'ai pas vue auparavant.
<base directory stuff>
assets\Changes.txt
assets\DefaultConfig,txt
Etc. Il est clairement censé être un sous-répertoire, mais ils sortent en tant que dossiers avec une barre oblique inverse.
Ils l'ont fait sous Windows (à l'aide de la commande Compress-Archive PowerScript), j'ai tenté de l'extraire sous Linux, en utilisant à la fois le programme ark
de KDE et archive-manager de GNOME.
Que se passe t-il ici?
Cela se produit car certains outils Windows utilisent apparemment des barres obliques backslashes (\
) comme séparateurs où ils devraient utiliser des barres obliques (/
). Backslash in Unix peut faire partie du nom de fichier ou de répertoire.
. Spécification du format de fichier zip (Version: 6.3.5 Lorsque j'écris ceci, révisé le 20 novembre 2018) indique:
4.4.17.1 Nom du fichier, avec chemin relatif optionnel. Le chemin stocké ne doit pas contenir d'une lettre de lecteur ni de périphérique, ni une barre oblique de pointe. Toutes les barres obliques doivent être des barres obliques
/
par opposition à des barres obliques\
Pour la compatibilité avec les systèmes de fichiers AMIGA et UNIX, etc. Si l'entrée provenait d'une entrée standard, il n'y a pas de champ de nom de fichier.
Ce fichier est mentionné par Microsoft dans un document atténuation: ZipArchiveEntry.FullName
Séparateur de chemin :
En commençant par des applications ciblant le .NET Framework 4.6.1, le séparateur de chemin d'accès utilisé dans le
ZipArchiveEntry.FullName
La propriété a changé de la barre oblique inverse (\
) Utilisé dans les versions précédentes de la framework .NET sur une barre oblique (/
). [...]Impacter
La modification apporte la mise en œuvre .NET en conformité avec la section 4.4.17.1 du . Spécification du format de fichier zip et permet aux archives .zip d'être décompressée sur des systèmes non-Windows.
Décompresser un fichier ZIP créé par une application qui cible une version précédente de la structure .NET sur des systèmes d'exploitation non-Windows tels que le Macintosh ne parvient pas à préserver la structure de répertoire. Par exemple, sur le Macintosh, il crée un ensemble de fichiers dont le nom de fichier concaténe le chemin de répertoire, ainsi que de tout backslash (
\
) Les caractères et le nom de fichier. En conséquence, la structure de répertoires des fichiers décompressés n'est pas préservée.
NOTE Le problème peut exister si l'archiveur a utilisé une ancienne version de .NET Framework ou s'il ne l'utilisait pas du tout, mais a mis en œuvre sa propre approche (indépendante) des fichiers Zip.
On peut ressentir le même problème avec RAR: NRGAR CRÉER DES FICHIERS DANS LES BACKSLASHES dans les noms au lieu d'une hiérarchie de répertoire appropriée .
Vous trouverez peut-être cette question sur UNIX & Linux SE utile: Convertissez une ZIP créée par Windows en Linux (problème de cheminement interne) . Mon approche (un peu expérimentales) est dans cette réponse .