私はAccurevデポをgitリポジトリに変換するのにac2gitツールを使用しています。私は、問題がPythonファイルのos.walk()関数が実行されているときに直面している。私のプロジェクトは非常に複雑なビルドパスを持っているので、パス長がWindows 7の260制限を超えるネストされたファイルがあります。microsoft supportで提供されている回避策を試しましたが、エラーを解決していません。私はまだエラーが発生する[Winerror 3]:実際には存在するが長さの制限のためにアクセスできないファイルが見つからない。パス拡張子\?をWindows 7のpythonスクリプト
これは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のみを使用し続ける必要があります。この問題が別の方法で解決できるかどうかのご提案ですか?
インデントを修正してください。 \\?\ \の代わりに\\?\にパスの先頭を更新するとどうなりますか? – rfkortekaas
同じエラーが発生します。 –
c:の後ろに3つのスラッシュがあるのはなぜですか?それは1つでなければなりません。 – rfkortekaas