2016-09-15 67 views
1

我必须对包含数百万个文件的文件夹进行一些清理。最终,我想抓住这些文件,然后看看它们是否存在于数据库中。但是我需要先抓住这些文件,而不让程序窒息。获取数百万文件的文件夹中的第一个文件

我试着去使用

var file = Directory.GetFiles(uri, "*.*").FirstOrDefault(); 

的路线然而,这需要永远运行。由于文件的数量。

是否有更好的方法来抓取不会花费那么长时间的文件?

+3

这就是为什么你应该通过在子目录中批量分割你的文件。一个包含数百万个文件的目录是一个糟糕的主意。 –

+1

除了使用已知文件的直接路径(或基于某种预测算法缩小搜索过滤器)之外,我没有看到更简单的方法。也许把它移到一个异步线程,这样它就不会锁定你的程序。一个建议是如果您需要多次运行该方法,请将这些文件加载​​到HashSet 中。然后,您可以针对哈希集运行未来呼叫。 –

+0

@LucasTrzesniewski相信我。我确定,因为他不想要这个。然而,我被解雇了。 – Prescient

回答

6

是的,Directory.EnumerateFiles是你在找什么。这将延迟加载您的文件,因此发出FirstOrDefault()不会等待所有文件被读取。

从文档:

的EnumerateFiles和GetFiles的方法的区别如下:当您使用EnumerateFiles,你可以返回整个集合之前开始枚举名称的集合;当您使用GetFiles时,您必须等待返回数组之前返回整个名称数组。因此,当您使用许多文件和目录时,EnumerateFiles可以更高效。

除此之外 - 具有数百万个文件的文件夹只是一个坏主意

+0

相信我。这是一个可怕的想法。一个我不想要的,想要修复的。但我在解决这个问题上已经过时了。 – Prescient

+0

经过测试,这工作得很好。太感谢了。 – Prescient

相关问题