如何在每次在DirectoryInfo.GetFiles()中加载新文件时执行操作?



为了澄清标题,每当使用DirectoryInfo.GetFiles()方法加载文件时。当我在谷歌上搜索时,我总是找到

var files = directory.GetFiles() //Loads all files in memory then they use it in a foreach loop, which is useless
foreach (var file in files)
{
progressBar1.Value += (int)Math.Floor(1 / files.Length);
}

但是你可以在我添加的注释中看到,该方法加载所有内存,然后使用for循环,但这是无用的,因为它已经做了最长的动作。

为什么我要这样做?:很简单,因为我想向用户显示程序在大文件夹中加载文件的位置。

我试着找到其他方法,但我没有找到。是的,它是what I tried的缩写。

如果我需要编辑什么,告诉我,但最重要的是,问我具体做了什么,因为我不记得我到底做了什么。

您可以使用Directory.EnumerateFiles代替GetFiles。这样,在开始处理它们之前,您就不会将它们全部加载到内存中,而是一个接一个地加载。

引用自docs:

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

但在我看来,你的进度条是无用的,无论如何,最长的操作是你处理文件的地方。这就是进度条有用的地方了。

最新更新