J'écris le script Python pour copier des fichiers; Malheureusement, il ne cesse pas d'échouer car le nom de fichier est trop long (> 256). Y a-t-il de toute façon pour traiter ce problème? P>
J'utilise Python 2.5.4 et Windows XP. P>
acclamations, p>
6 Réponses :
Utilisez chemins commençant par la chaîne \\? \ code>
. p>
À piggyback sur la réponse, n'ajoutez pas simplement "\\? \" À votre chemin, ajoutez "\\\\\? \\" à votre chemin, afin d'échapper aux barres antibruit nécessaires
Avez-vous essayé les solutions de contournement suggéré dans Ceci < / a> vieux fil, exp. Le tour "Prefix magique"? Je ne sais pas si le problème sous-enyant (que nous n'utilisons pas la bonne des nombreuses API Windows disponibles pour les fichiers) a déjà été corrigé, mais les solutions de contournement doivent fonctionner ... P>
Pour utiliser le préfixe \\ \\? \\ \\? \\ \\? \\ code> préfixe (comme déjà proposé), vous devez également vous assurer d'utiliser des chaînes UNICODE comme noms de fichiers, non réguliers (octets). P>
Oh, je ne le savais pas. Merci!
De plus, j'ai trouvé que (1) seuls les noms de chemin absolus travaillés, et (2) seulement les gastrastresses fonctionnaient.
pour quelqu'un d'autre à la recherche de solution ici:
\\? \ code> comme déjà indiqué et assurez-vous que la chaîne est unicode; li>
- Si vous utilisez Shuttil, surtout quelque chose comme ShutL.RMTree avec une méthode ONERRRE, vous devez modifier aussi pour ajouter du préfixe car il est dépouillé quelque part sur le chemin. Li>
ol>
Vous devrez écrire quelque chose comme: p> xxx pré> Ceci est un exemple pour Python 3.x afin que toutes les chaînes soient unicode. P> p>
Cette réponse par udev suggère d'ajouter Il semble fonctionner pour travailler pour moi. p> p>
Une autre chose qui fonctionne pour moi est de modifier le répertoire en place auquel je veux copier:
import os import shutil def copyfile_long_path(src, dst): src_abs = os.path.abspath(src) dst_abs = os.path.abspath(dst) cwd = os.getcwd() os.chdir(os.path.dirname(dst)) shutil.copyfile(src_abs, os.path.filename(dst)) os.chdir(cwd) if not os.path.isfile(dst_abs): raise Exception("copying file failed")