目前我正在使用下面的代码来查找文件夹中的下一个文件。基本上我存储了我读取的文件的最后修改日期和时间,在完成处理该文件之后,我需要转到下一个文件。但我的代码目前大约需要10秒才能使用下面的代码搜索下一个文件。
有人可以建议更快的方式吗?
DateTime lastfile = DateTime.Parse(System.IO.File.ReadAllText(@"lastFile.txt"));
string[] systemAFiles = System.IO.Directory.GetFiles("G:\\");
foreach (string files in systemAFiles)
{
DateTime lastWriteTime = System.IO.File.GetLastWriteTime(files);
if (lastWriteTime > lastfile) //produced after last file was read
{
readxml(files);
break;
}
}
答案 0 :(得分:2)
您是否尝试缓存结果?您只需执行一次大部分工作,然后快速访问以下结果:字典。
收集所有文件的时间:
string[] systemAFiles = System.IO.Directory.GetFiles("G:\\");
Dictionary<DateTime, string> filesAndTimes = new Dictionary<DateTime, string>();
foreach (string file in systemAFiles)
{
var time = System.IO.File.GetLastWriteTime(file);
filesAndTimes[time] = file;
}
然后,您只需访问已收集的值,而不是再次搜索所有文件:
var myFile = filesAndTimes.FirstOrDefault(item => item.Key > lastfile);
此外,如果您需要更新文件的时间,只需在词典中添加一个条目即可。请注意,DateTime
是字典中的关键字。如果不是写入时间,则可能导致键冲突。但是对于两个文件没有两个相同的写入时间,所以在这里依赖DateTime
应该是安全的。