gpt4 book ai didi

c# - Python os.walk 返回的文件少于 C# Directory.GetFiles

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:06 25 4
gpt4 key购买 nike

为什么 python 的 os.walk 返回的文件比使用 C# Directory.GetFiles 返回的文件少?当使用相同的起始目录时,我希望得到相同的结果。

我的 Python 代码是:

import os
#Note that startdir is entered as 'Z:\directoryname', same as c# below
startdir = input("Enter Starting Path: ")
fileList = []
for(dirname, dirs, files) in os.walk(startdir, followlinks=True):
for filename in files:
thefile = os.path.join(dirname,filename)
fileList.append(thefile)
printline = 'Total: ' + str(len(fileList))
print(printline)

C# 很简单:

using System.IO;
...
string rootPath = @"Z:\directoryname";
string[] dirReturn = Directory.GetFiles(rootPath, "*", SearchOption.AllDirectories);

但是,Python 返回数组中的 653231 个文件,而 C# 返回 653271(相差 40)。

我检查了 C# 数组中的重复项,但没有找到。我比较了这两个数组,发现 C# 数组中的文件在 Python 数组中丢失; C# 文件都是有效的。

我承认我似乎从我的 C# 代码中得到了有效的结果,也许应该感到高兴,但我想了解为什么这两个结果之间存在差异。

最佳答案

信誉不足,无法发表评论,但很可能在使用 os.walk 时文件存在问题,导致该方法无法实际读取文件。 From the documentation

“默认情况下,来自 scandir() 调用的错误被忽略。如果指定了可选参数 onerror,它应该是一个函数;它将使用一个参数调用,一个 OSError 实例。它可以报告错误继续行走,或引发异常以中止行走。请注意,文件名可用作异常对象的文件名属性。”

尝试使用这样的东西:

import os

def error_os_walk(exception):
print("Error in file, python can't read")

startdir = input("Enter Starting Path: ")
fileList = []
for(dirname, dirs, files) in os.walk(startdir, followlinks=True, onerror=error_os_walk):
for filename in files:
thefile = os.path.join(dirname,filename)
fileList.append(thefile)
printline = 'Total: ' + str(len(fileList))
print(printline)

关于c# - Python os.walk 返回的文件少于 C# Directory.GetFiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369252/

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