gpt4 book ai didi

python - 在 Windows 7 中使用路径扩展\\?\和 python 脚本

转载 作者:行者123 更新时间:2023-12-01 03:42:55 24 4
gpt4 key购买 nike

我正在使用该工具ac2git将我的 Accurev 仓库转换为 git 仓库。当 python 文件中的 os.walk() 函数运行时,我遇到了问题。由于我的项目有一个相当复杂的构建路径,因此我嵌套了路径长度超过 Windows 7 上 260 限制的文件。我尝试使用 microsoft support 提供的解决方法但它并没有解决错误。我仍然收到错误 [Winerror 3]: File not find ,而实际上它存在,但由于长度限制而无法访问。

这是 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

我附加了“\\?\”以允许更长的路径长度,但现在我收到此错误:

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

我是 Python 新手,我不太确定解决这个问题的正确方法是什么。我只能继续使用 Windows 7。如果可以通过其他方式解决此问题,有什么建议吗?

最佳答案

经过一番折腾,我对 python 代码进行了更改,

显然这个信息非常重要“Windows API 中的文件 I/O 函数将“/”转换为“\”,作为将名称转换为 NT 样式名称的一部分,除非使用“\?”\"前缀,详见以下各节。"

所以我只是将这段代码添加到函数中:

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

它成功了!

关于python - 在 Windows 7 中使用路径扩展\\?\和 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com