我的代码有问题我可以让它复制目录中的所有文件及其子目录,如果修改日期与今天相同,我有一个if语句告诉它复制文件但它仍然复制我在互联网上搜索的所有文件以获得解决方案,他们都提出了模糊的答案,这些答案类似于我已经粘贴下面代码的母鹿。
DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath);
DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath);
DirectoryInfo dir = new DirectoryInfo(dlg.SelectedPath);
FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo fi in fis)
{
if (fi.LastWriteTime.Date == DateTime.Today.Date)
{
FileInfo[] sourceFiles = source.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo fc in sourceFiles)
if (fc.LastWriteTime.Date == DateTime.Today.Date)
for (int i = 0; i < sourceFiles.Length; ++i)
File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
}
}
任何帮助将不胜感激
答案 0 :(得分:3)
不应该是这样吗?
FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo fi in fis)
{
if (fi.LastWriteTime.Date == DateTime.Today.Date)
{
File.Copy(fi.FullName, target.FullName + "\\" + fi.Name, true);
}
}
现在,只要您找到满足条件的文件,就会将源文件夹中的所有文件复制到目标文件夹,这是错误的。您只应复制所需的文件。
上面的代码仅适用于根文件夹中的文件,但也很容易使其适用于子文件夹。只需创建另一个函数来查找文件夹中的所有子文件夹,并使用每个子文件夹作为参数调用上面的代码。
答案 1 :(得分:1)
FileSystem和.net中DateTime的精度不一样。
尝试这样的事情:
if((Math.Abs((currentFile.LastWriteTime - DateTime.Today.Date).TotalMilliseconds) > tolerance){...}
答案 2 :(得分:1)
作为替代方案,您可以使用如下的LINQ查询:
DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath);
DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath);
var files = source.GetFiles("*", SearchOption.AllDirectories).Where(file => file.LastWriteTime.Date.Equals(DateTime.Today.Date));
foreach (FileInfo file in files)
File.Copy(file.FullName, target.FullName + "\\" + file.Name, true);
答案 3 :(得分:0)
我认为你在if语句之后缺少缩进或括号,我认为如果后面跟着复制语句它是空的。做
if (date == date)
{
filecopy
}