Utilizar la extensión de ruta \\? \ Para Windows 7 con script python

Estoy usando la herramienta ac2git para convertir mi depósito de Accurev al repository de git. Estoy enfrentando un problema cuando se ejecuta la function os.walk () en el file python. Como mi proyecto tiene una ruta de compilation bastante complicada, he nested files que tienen una longitud de ruta que excede la limitación de 260 en Windows 7. Intenté usar las soluciones provisionales proporcionadas por el soporte de Microsoft, pero no está resolviendo el error. Sigo recibiendo el error [Winerror 3]: file no encontrado, cuando en realidad está presente pero no se puede acceder debido a la limitación de longitud.

Esto es parte del código en el script ac2git.py:

def PreserveEmptyDirs(self): preservedDirs = [] for root, dirs, files in os.walk(self.gitRepo.path, topdown=True): for name in dirs: path ="\\\\?\\"+ToUnixPath(os.path.join(root, name)) # Preserve empty directories that are not under the .git/ directory. if git.GetGitDirPrefix(path) is None and len(os.listdir(path)) == 0: filename = os.path.join(path, '.gitignore') with codecs.open(filename, 'w', 'utf-8') as file: #file.write('# accurev2git.py preserve empty dirs\n') preservedDirs.append(filename) if not os.path.exists(filename): logger.error("Failed to preserve directory. Couldn't create '{0}'.".format(filename)) return preservedDirs def ToUnixPath(path): rv = SplitPath(path) if rv is not None: if rv[0] == '/': rv = '/' + '/'.join(rv[1:]) else: rv = '/'.join(rv) return rv def SplitPath(path): rv = None if path is not None: path = str(path) rv = [] drive, path = os.path.splitdrive(path) head, tail = os.path.split(path) while len(head) > 0 and head != '/' and head != '\\': # For an absolute path the starting slash isn't removed from head. rv.append(tail) head, tail = os.path.split(head) if len(tail) > 0: rv.append(tail) if len(head) > 0: # For absolute paths. rv.append(head) if len(drive) > 0: rv.append(drive) rv.reverse() return rv 

He agregado el "\\? \" Para permitir longitudes de ruta más largas, pero ahora aparece este error:

 FileNotFoundError: [WinError 3] The system cannot find the path specified: '\\\\?\\C:///s/cms' 

Soy nuevo en Python y no estoy muy seguro de cuál es el enfoque correcto para abordarlo. Tengo que seguir usando Windows 7 solamente. ¿Alguna sugerencia si este problema se puede solucionar de otra manera?

Así que después de mucho ruido, hice cambios en el código de Python,

Aparentemente esta información es muy importante " Las funciones de E / S de file en la API de Windows convierten" / "a" \ "como parte de convertir el nombre a un nombre de estilo NT, excepto cuando se usa el prefijo" \? \ "Como se detalla en las siguientes secciones " .

Así que acabo de agregar este código a la function:

 def ToUnixPath(path): rv = SplitPath(path) rv[:] = [item for item in rv if item != '/'] rv = '\\'.join(rv) return r"\\?"+"\\"+rv 

¡Y funcionó!