Question

Je vous écris script Python pour copier des fichiers; malheureusement, il continue d'échouer parce que le nom de fichier est trop long (> 256). Y at-il de toute façon à faire face à ce problème?

J'utilise Python 2.5.4 et Windows XP.

Cheers,

Était-ce utile?

La solution

Autres conseils

Pour utiliser le préfixe \\?\ (comme cela a déjà proposé), vous devez également vous assurer que vous utilisez des chaînes Unicode en tant que noms de fichiers, pas des chaînes régulières (octet).

Avez-vous essayé les solutions de contournement proposées dans ce vieux fil, exp. le truc « préfixe magique »? Je ne sais pas si la question de la Sous-jacent (que nous ne sommes pas en utilisant la bonne sur les nombreuses disponibles API Windows pour les fichiers) jamais été réparé, mais les solutions de contournement devrait fonctionner ...

Pour ceux qui cherchent d'autre solution ici pour:

  1. Vous devez ajouter le préfixe \\?\ comme déjà indiqué, et est sûr que la chaîne unicode;
  2. Si vous utilisez shutil, en particulier quelque chose comme shutil.rmtree avec la méthode onerror, vous devrez modifier aussi ajouter le préfixe comme il se dépouilla quelque part sur le chemin.

Vous devez écrire quelque chose comme:

def remove_dir(directory):
    long_directory = '\\\\?\\' + directory
    shutil.rmtree(long_directory, onerror=remove_readonly)

def remove_readonly(func, path, excinfo):
    long_path = path
    if os.sep == '\\' and '\\\\?\\' not in long_path:
        long_path = '\\\\?\\' + long_path
    os.chmod(long_path, stat.S_IWRITE)
    func(long_path)

Ceci est un exemple pour 3.x Python si toutes les chaînes sont unicode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top