Domanda

Scrivo Python script per copiare i file; purtroppo mantiene in mancanza, perché il nome del file è troppo lungo (> 256). Esiste un modo per affrontare questo problema?

Sto usando Python 2.5.4 e Windows XP.

Saluti,

È stato utile?

Altri suggerimenti

Per poter utilizzare il prefisso \\?\ (come già proposto), è inoltre necessario assicurarsi di utilizzare stringhe Unicode come nomi di file, non regolari (byte) le stringhe.

Hai provato le soluzioni alternative suggerite nella questo vecchio filo, exp. il prefisso "magico" trucco? Non so se il problema underyling (che non stiamo utilizzando il diritto uno delle molte API di Windows disponibile per i file) mai ottenuto fisso, ma le soluzioni alternative dovrebbe funzionare ...

Per chiunque altro alla ricerca di soluzione qui:

  1. È necessario aggiungere il prefisso \\?\ come già detto, e assicurarsi che la stringa è unicode;
  2. Se si utilizza shutil, soprattutto qualcosa di simile con il metodo shutil.rmtree onerror, è necessario modificare anche aggiungere il prefisso, come si arriva spogliato da qualche parte lungo la strada.

Dovrete scrivere qualcosa come:

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)

Questo è un esempio per Python 3.x in modo tutte le stringhe sono unicode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top