- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我问的问题中Retrieve a list of filenames in folder and all subfolders quickly还有一些我发现的,似乎搜索许多文件的方法是使用 EnumerateFiles 方法。
The EnumerateFiles and GetFiles methods differ as follows: When you use EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use GetFiles, you must wait for the whole array of names to be returned before you can access the array. Therefore, when you are working with many files and directories, EnumerateFiles can be more efficient.
这对我来说听起来很棒,我的搜索大约需要 10 秒,所以我可以在收到信息时开始制作我的列表。但我无法弄清楚。当我运行 EnumerateFiles 方法时,应用程序会卡住,直到它完成。我可以在后台工作程序中运行它,但同样的事情也会发生在那个线程上。有帮助吗?
DirectoryInfo dir = new DirectoryInfo(MainFolder);
List<FileInfo> matches = new List<FileInfo>(dir.EnumerateFiles("*.docx",SearchOption.AllDirectories));
//This wont fire until after the entire collection is complete
DoSoemthingWhileWaiting();
最佳答案
您可以通过将其插入后台任务来完成此操作。
例如,你可以这样做:
var fileTask = Task.Factory.StartNew( () =>
{
DirectoryInfo dir = new DirectoryInfo(MainFolder);
return new List<FileInfo>(
dir.EnumerateFiles("*.docx",SearchOption.AllDirectories)
.Take(200) // In previous question, you mentioned only wanting 200 items
);
};
// To process items:
fileTask.ContinueWith( t =>
{
List<FileInfo> files = t.Result;
// Use the results...
foreach(var file in files)
{
this.listBox.Add(file); // Whatever you want here...
}
}, TaskScheduler.FromCurrentSynchronizationContext()); // Make sure this runs on the UI thread
DoSomethingWhileWaiting();
您在评论中提到:
I want to display them in a list. and perfect send them to the main ui as they come in
在这种情况下,您必须在后台处理它们,并在它们进入时将它们添加到列表中。类似于:
Task.Factory.StartNew( () =>
{
DirectoryInfo dir = new DirectoryInfo(MainFolder);
foreach(var tmp in dir.EnumerateFiles("*.docx",SearchOption.AllDirectories).Take(200))
{
string file = tmp; // Handle closure issue
// You may want to do this in batches of >1 item...
this.BeginInvoke( new Action(() =>
{
this.listBox.Add(file);
}));
}
});
DoSomethingWhileWaiting();
关于c# - 如何在完成之前访问 DirectoryInfo.EnumerateFiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10605659/
K:\test 中存在空目录“New Folder” >$a = gci K:\test目录不应具有 Length 属性。让我们检查: [bool]($a.PSobject.Properties.Na
如何将新目录添加到列表中 public static List Directory = new List(); Directory.Add("C:\\test"); // error 'string
这一定很愚蠢,但我就是不明白。所以我有这段代码: var dir = new DirectoryInfo("somedir"); if (dir.Exists) { dir.Delete(tru
我遇到了奇怪的事情。 每当我尝试在代码中创建DirectoryInfo对象并将其传递给根驱动器(C:)时,该对象的Name属性都设置为“ Debug”,并且Parent设置为{bin}文件夹。 我不经
我正在使用 Dictionary,使用 DirectoryInfo 和 FileInfo 等对象作为键。以这种方式使用它们安全吗?如何确保可以通过这种方式安全地使用对象类型? 最佳答案 一般来说,要准
我正在使用 DirectoryInfo.GetDirectories()递归查找给定路径下的所有子目录。 但是,我想排除 System 文件夹,并且没有明确的方法。 在 FindFirstFile/F
我有一个应用程序,它必须枚举一些文件夹并处理其中的文件。 它必须支持恢复,这意味着它必须从上次处理的文件夹开始。 我正在考虑使用 the DirectoryInfo.EnumerateDirector
我在以下代码段中遇到行为差异 DirectoryInfo di = new DirectoryInfo("c:\"); FileInfo[] textFiles = di.GetFiles("log_
我正在尝试查询文件夹并仅返回具有数字文件夹名称的文件夹。问题是我需要在 DirectoryInfo[] 对象中使用它。 我可以这样做(而且有效): List subDirList = Director
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我还是 C# 的新手...我正在构建一个 WPF 应用程序,我正在尝试应用一些用户应用程序设置。插入标准应用程序设置(int、double、string 等)很容易。我什至插入了 WindowStat
我想阅读文件夹和文件名,它们被放入一个列表中,并排序显示例如,我有一个如下所示的文件: 1-4999.txt 5000-9999.txt…… 我想对数据文件夹进行排序 var endpa
在我问的问题中Retrieve a list of filenames in folder and all subfolders quickly还有一些我发现的,似乎搜索许多文件的方法是使用 Enum
我正在使用 DirectoryInfo.CreationTime 来获取目录的创建日期但是它返回奇怪的日期 {21/11/1617 0:00:00} var directoryInfo = new D
如果我声明的目录不存在或已更改,DirectoryInfo 如何知道在哪里创建新目录?因为 Create() 方法不带参数。 像 Directory.CreateDirectory(path),其中路
我已经搜索了大约一个小时,但还是找不到解决我问题的方法。除了以“_days.txt”结尾的文件之外,我正在尝试显示某个目录中的所有 .txt 文件。这是我的代码,希望你能有所帮助。谢谢! foreac
我有以下代码可以正常工作。我想要做的(一次)是检查目录是否存在,如果存在,我想检查文件夹中是否存在文件。如果是,则返回 Y,否则返回 N: string s = new DirectoryInfo("
我正在测试以查看 DirectoryInfo[] 是否包含目录我的代码在下面 DirectoryInfo[] test = dir.GetDirectories(); if(test.Contains
我只是用我自己的文件夹浏览器做一些试验。我注意到当我查看 Windows 7 中的 System32 文件夹时,我得到了一些奇怪的结果。这是代码: DataTable dt=new DataTable
当我递归浏览一些文件夹和文件时,我遇到了这个错误: 指定的路径、文件名或两者都太长。完全限定文件名必须少于 260 个字符,目录名必须少于 248 个字符。 这是我的功能 private void P
我是一名优秀的程序员,十分优秀!