我已经根据自己的目标使用该库很长时间了,以在PC上快速查找文件-https://github.com/VladPVS/FastSearchLibrary
public static string _keywords = "TestFile, .rar, .zip, .mp3, Bloody6, Artificial";
public void TestSe()
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
List<string> keywords = _keywords.Split(',').ToList(); // #2 <--------
//List<string> keywords = new List<string>() {
// @"TestFile",
// @".rar",
// @".zip",
// @".mp3",
// @"Bloody6",
// @"Artificial" }; // #1 <----------
List<string> folders = new List<string>();
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.IsReady)
{
string driveRoot = drive.RootDirectory.FullName;
folders.Add(driveRoot);
}
}
searcher = new FileSearcherMultiple(folders, (f) =>
{
foreach (var keyword in keywords)
if (f.Name.Contains(keyword))
return true;
return false;
}, tokenSource);
List<FileInfo> files = new List<FileInfo>();
searcher.FilesFound += (sndr, arg) =>
{
lock (locker)
{
arg.Files.ForEach((f) =>
{
files.Add(f);
new Thread(() =>
{
//my work
}).Start();
});
}
};
searcher.SearchCompleted += (sndr, arg) =>
{
//ended
};
searcher.StartSearchAsync();
}
我决定在全局字符串中显示关键字列表(根据需要)。但是由于某种原因,搜索开始变得平淡。 如果直接按#1 中的顺序使用列表,则它将按3000多个关键字查找所有文件。 如果使用#2 ,它将通过关键字“ Bloody6”,“人工”找到4-5个文件。可能是什么问题?
答案 0 :(得分:4)
最可能的原因是,如果您使用_keywords.Split(',')
,它将返回带有空格的扩展名:
例如[space].rar
,[space].zip
,[space].mp3
等
您需要调整以下值:
_keywords.Split(',').Select(s => s.TrimStart()).ToList();