Compatibilidad con el nombre de archivo largo de Python roto en Windows

Escribo el script de Python para copiar archivos; desafortunadamente, sigue fallando porque el nombre de archivo es demasiado largo (> 256). ¿Hay alguna forma de lidiar con ese problema?

Estoy usando Python 2.5.4 y Windows XP.

Aclamaciones,

Utilice rutas que comiencen con la cadena \\?\ .

Para utilizar el prefijo \\?\ (Como ya se ha propuesto), también debe asegurarse de utilizar cadenas de Unicode como nombres de archivo, no de cadenas normales (bytes).

¿Has probado las soluciones sugeridas en este viejo hilo, exp. ¿El truco del “prefijo mágico”? No sé si el problema del underyling (que no estamos usando la correcta de las muchas API de Windows disponibles para los archivos) alguna vez se solucionó, pero las soluciones deberían funcionar …

Para cualquier persona que busque una solución aquí:

  1. Debe agregar el prefijo \\?\ Como ya se indicó, y asegurarse de que la cadena sea unicode;
  2. Si está utilizando shutil, especialmente algo como shutil.rmtree con el método onerror, deberá modificarlo también para agregar el prefijo a medida que se elimina en algún lugar del camino.

Tendrás que escribir algo como:

 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) 

Este es un ejemplo para Python 3.x, por lo que todas las cadenas son unicode.