Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取包含数百万个文件的文件夹中的第一个文件_C# - Fatal编程技术网

C# 获取包含数百万个文件的文件夹中的第一个文件

C# 获取包含数百万个文件的文件夹中的第一个文件,c#,C#,我必须在一个有数百万个文件的文件夹上做些家务。最后,我想抓取这些文件,然后看看它们是否存在于数据库中。但我需要先抓取文件,不要让程序阻塞 我试着走使用的路线 var file = Directory.GetFiles(uri, "*.*").FirstOrDefault(); 然而,这需要永远运行。因为文件太多了 有没有更好的方法来抓取不需要这么长时间的文件?是的,这就是您要寻找的。这将延迟加载文件,因此发出FirstOrDefault()不会等待读取所有文件 从文档中: EnumerateF

我必须在一个有数百万个文件的文件夹上做些家务。最后,我想抓取这些文件,然后看看它们是否存在于数据库中。但我需要先抓取文件,不要让程序阻塞

我试着走使用的路线

var file = Directory.GetFiles(uri, "*.*").FirstOrDefault();
然而,这需要永远运行。因为文件太多了

有没有更好的方法来抓取不需要这么长时间的文件?

是的,这就是您要寻找的。这将延迟加载文件,因此发出
FirstOrDefault()
不会等待读取所有文件

从文档中:

EnumerateFiles和GetFiles方法的区别如下:使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合;使用GetFiles时,必须等待返回整个名称数组,然后才能访问该数组。因此,当您处理许多文件和目录时,枚举文件可以更有效


除此之外,拥有一个包含数百万文件的文件夹是一个坏主意。

这正是你应该在子目录中分批分割文件的原因。一个目录包含数百万个文件是个坏主意。除了使用已知文件的直接路径(或者基于某种预测算法缩小搜索范围),我看不到更简单的方法。也许可以将它移动到异步线程,这样它就不会锁定您的程序。一个建议是,如果需要多次运行该方法,请将文件加载到哈希集中。然后你就可以在以后的通话中使用哈希集了。@Lucastzesniewski相信我。我当然不想这样。但是我被否决了,相信我。这是个可怕的主意。一个我不想也不想修的。但在解决这个问题上我被否决了。