在此之前,我曾问过一个非常类似的问题。但这与获取目录有关,而这与文件有关。这些代码彼此有点不同。自从我尝试将其转换为看起来像我的旧问题的答案以来,我一直无法使其工作。
string[] files = Directory.GetFiles(ScanPath, "*.*", System.IO.SearchOption.AllDirectories);
DateTime From = DateTime.Now.AddHours(-24);
DateTime To = DateTime.Now;
foreach (string name in files)
{
FileInfo file = new FileInfo(name);
string fullname = file.FullName;
if (file.LastWriteTime >= From & file.LastWriteTime <= To && file.Length >= ScanSize)
Console.WriteLine(file.FullName + " ; " + "last changed at " + " ; " + file.LastWriteTime.ToString());
}
我遇到了与其他问题相同的错误。因为我不知道将代码放在哪里foreach
。由于它不是枚举,而是一个Directory.GetFiles()
。
发生错误的原因:
Directory.GetFiles(ScanPath, "*", SearchOption.AllDirectories);
因为这会立即获取目录的所有文件。但是,如果删除它,它只会获取给定路径中的文件,而不会包含子目录中的任何文件。因此,我被告知要应用递归。
我是系统的管理员,我打算在整个数据驱动器上运行它。D:\
我希望这里的任何人都知道一个很好的例子。
您的应用无法访问某些文件夹,对于其他文件夹,您可以使用以下代码:
void DiscoverDirs(string where, List<string> files, Func<FileInfo, bool> filter)
{
try
{
var di = new DirectoryInfo(where);
files.AddRange(di.EnumerateFiles().Where(filter).Select(x => x.FullName));
foreach (var dir in Directory.GetDirectories(where))
{
DiscoverDirs(dir, files, filter);
}
}
catch
{
// no access fo this dir, ignore
}
}
用法:
DateTime From = DateTime.Now.AddHours(-24);
DateTime To = DateTime.Now;
var ScanSize = 5*1024*1024;
var list = new List<string>();
DiscoverDirs(@"C:\", list,
file => file.LastWriteTime >= From & file.LastWriteTime <= To && file.Length >= ScanSize);
foreach (string name in list)
{
FileInfo file = new FileInfo(name);
string fullname = file.FullName;
Console.WriteLine(file.FullName + " ; " + "last changed at " + " ; " + file.LastWriteTime.ToString());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句