【发布时间】:2021-11-04 05:55:08
【问题描述】:
我正在编写一个简短的代码来将文件从一个目录移动到另一个目录。我的代码很简单,工作正常,看起来像这样:
public void copy()
{
string sourcePath = @"/Users/philip/Desktop/start";
string destinationPath = @"/Users/philip/Desktop/Ziel";
string[] files = Directory.GetFiles(sourcePath)
foreach (string s in files)
{
string fileName = System.IO.Path.GetFileName(s);
string destFile = System.IO.Path.Combine(destinationPath, fileName);
System.IO.File.Copy(s, destFile, true);
}
}
程序从源路径获取所有文件,并在 foreach 循环中将目标路径组合到每个文件中,包含目标路径和文件名。然后它移动它。一切正常。
我现在的目标是,不要将我目录中的所有文件都存储到字符串数组中。我只想获取 01.07.2021 之后具有 CreationTime 的文件。有没有简单快捷的方法?
我已经使用它来获取文件,但它指定了一个单一的日期,而不是特定日期之后的所有文件:
var files = Directory.GetFiles(sourcePath).Where(x => new FileInfo(x).CreationTime.Date == DateTime.Today.Date);
如果你能帮助我,我会很高兴。
最好的问候, 利亚姆
【问题讨论】:
-
您好,谢谢您的回答。那将是一个选项,但我在一个目录中有超过 100.000 个文件,并且每个文件都将在 foreach 循环中检查某些条件。所以我想在检查所有文件之前过滤这 100.000 个文件,以提高代码效率。
-
你可以在检查它们之前按日期降序排列它们,另外我还建议你创建一个
DirectoryInfo,然后使用DirectoryInfo.GetFiles,这样你就可以避免创建FileInfo -
您说“但它指定了一个单数日期”,这确实与使用的
==匹配。你试过new FileInfo(x).CreationTime.Date > your_desired_date吗? -
100000 个带有 Directory.GetFiles 的文件?查看 Directory.EnumerateFiles 以及为什么要处理很多文件时更好。