通过详细检查在文件中搜索
Search in files with detail check
我想搜索文件夹和子文件夹中的所有文件并找到具有特定详细信息的文件我该怎么做?
我用的是下面的方法,但是在这个方法中,我必须等到所有文件都收到,然后循环检查它们的详细信息但是当我有超过1000个文件时确实需要很多时间
AllofItems = GetFileList(@"\myfolder").ToArray();
foreach (var item in AllofItems)
{
var file = ShellFile.FromFilePath(item); // for example C:\myfolder.jpg
if(file.Properties.System.Title.Value.Equal("Empty")){
coverView.Items.Add(item);
}
}
这是GetFileList
func
public IEnumerable<string> GetFileList(string rootFolderPath)
{
Queue<string> pending = new Queue<string>();
pending.Enqueue(rootFolderPath);
string[] tmp;
while (pending.Count > 0)
{
rootFolderPath = pending.Dequeue();
try
{
tmp = Directory.GetFiles(rootFolderPath);
}
catch (DirectoryNotFoundException) { continue; }
catch (UnauthorizedAccessException)
{
continue;
}
for (int i = 0; i < tmp.Length; i++)
{
yield return tmp[i];
}
tmp = Directory.GetDirectories(rootFolderPath);
for (int i = 0; i < tmp.Length; i++)
{
pending.Enqueue(tmp[i]);
}
}
}
我想同时做这个。搜索时检查文件详细信息
DirectoryInfo Class 对此有一些有用的方法。
var dir = new DirectoryInfo(@"C:\myBaseFolder");
FileInfo[] allfiles = dir.GetFiles("*.*", SearchOption.AllDirectories);
这将自动包含所有子目录。
您可以像这样利用 await
关键字
private static async Task<FileInfo[]> GetFileList(string rootFolderPath)
{
FileInfo[] allfiles;
await Task.Run(() => {
var dir = new DirectoryInfo(rootFolderPath);
allfiles = dir.GetFiles("*.*", SearchOption.AllDirectories);
});
return allfiles;
}
然后这样称呼它
FileInfo[] allFiles = await GetFileList(@"\myfolder");
并且不要忘记将 async
关键字添加到执行此调用的方法中。
我想搜索文件夹和子文件夹中的所有文件并找到具有特定详细信息的文件我该怎么做?
我用的是下面的方法,但是在这个方法中,我必须等到所有文件都收到,然后循环检查它们的详细信息但是当我有超过1000个文件时确实需要很多时间
AllofItems = GetFileList(@"\myfolder").ToArray();
foreach (var item in AllofItems)
{
var file = ShellFile.FromFilePath(item); // for example C:\myfolder.jpg
if(file.Properties.System.Title.Value.Equal("Empty")){
coverView.Items.Add(item);
}
}
这是GetFileList
func
public IEnumerable<string> GetFileList(string rootFolderPath)
{
Queue<string> pending = new Queue<string>();
pending.Enqueue(rootFolderPath);
string[] tmp;
while (pending.Count > 0)
{
rootFolderPath = pending.Dequeue();
try
{
tmp = Directory.GetFiles(rootFolderPath);
}
catch (DirectoryNotFoundException) { continue; }
catch (UnauthorizedAccessException)
{
continue;
}
for (int i = 0; i < tmp.Length; i++)
{
yield return tmp[i];
}
tmp = Directory.GetDirectories(rootFolderPath);
for (int i = 0; i < tmp.Length; i++)
{
pending.Enqueue(tmp[i]);
}
}
}
我想同时做这个。搜索时检查文件详细信息
DirectoryInfo Class 对此有一些有用的方法。
var dir = new DirectoryInfo(@"C:\myBaseFolder");
FileInfo[] allfiles = dir.GetFiles("*.*", SearchOption.AllDirectories);
这将自动包含所有子目录。
您可以像这样利用 await
关键字
private static async Task<FileInfo[]> GetFileList(string rootFolderPath)
{
FileInfo[] allfiles;
await Task.Run(() => {
var dir = new DirectoryInfo(rootFolderPath);
allfiles = dir.GetFiles("*.*", SearchOption.AllDirectories);
});
return allfiles;
}
然后这样称呼它
FileInfo[] allFiles = await GetFileList(@"\myfolder");
并且不要忘记将 async
关键字添加到执行此调用的方法中。