C# 如何在c中复制具有特定日期的文件
我的代码有一个问题,我可以让它复制一个目录及其子目录中的所有文件,我有一个if语句,告诉它如果修改日期与今天相同,则复制一个文件,但它仍然复制了我在internet上搜索的所有文件以寻求解决方案,它们都给出了类似的模糊答案我已经拥有的doe我已经在下面粘贴了代码C# 如何在c中复制具有特定日期的文件,c#,file,date,copy,C#,File,Date,Copy,我的代码有一个问题,我可以让它复制一个目录及其子目录中的所有文件,我有一个if语句,告诉它如果修改日期与今天相同,则复制一个文件,但它仍然复制了我在internet上搜索的所有文件以寻求解决方案,它们都给出了类似的模糊答案我已经拥有的doe我已经在下面粘贴了代码 DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath); DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath
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);
}
}
任何帮助都将不胜感激难道不是这样吗
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);
}
}
现在的问题是,每当你找到一个符合你条件的文件,你就把源文件夹中的所有文件复制到目标文件夹,这是错误的。你应该只复制你需要的文件
上面的代码只适用于根文件夹中的文件,但也很容易使其适用于子文件夹。只需创建另一个函数来查找文件夹中的所有子文件夹,并使用每个子文件夹作为参数调用上面的代码。不应该是这样吗
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);
}
}
现在的问题是,每当你找到一个符合你条件的文件,你就把源文件夹中的所有文件复制到目标文件夹,这是错误的。你应该只复制你需要的文件
上面的代码只适用于根文件夹中的文件,但也很容易使其适用于子文件夹。只需创建另一个函数来查找文件夹中的所有子文件夹,并使用每个子文件夹作为参数调用上面的代码。我认为if语句后缺少缩进或圆括号,我认为if后面跟着copy语句是空的。做
if (date == date)
{
filecopy
}
我认为在if语句之后缺少缩进或括号,我认为它后面是一个空if,后面是copy语句。做
if (date == date)
{
filecopy
}
文件系统和.net中的日期时间精度不一样 试着这样做:
if((Math.Abs((currentFile.LastWriteTime - DateTime.Today.Date).TotalMilliseconds) > tolerance){...}
文件系统和.net中的日期时间精度不一样 试着这样做:
if((Math.Abs((currentFile.LastWriteTime - DateTime.Today.Date).TotalMilliseconds) > tolerance){...}
作为替代方案,您可以使用如下所示的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);
作为替代方案,您可以使用如下所示的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);
您不是在fis循环中使用foreach FileInfo fi和sourceFiles循环中使用foreach FileInfo fc对源文件进行了两次迭代吗?您不是在fis循环中使用foreach FileInfo fi和sourceFiles循环中使用foreach FileInfo fc对源文件进行了两次迭代吗?谢谢,这确实有助于c的入门还不知道诀窍,但要练习使自己变得完美。@bobthemac是的,它知道。不过,我有一句忠告;适当缩进,必要时使用大括号。它将删除许多错误源,尤其是在启动时。不管怎样,祝你好运与C;我认为这是值得学习的:。谢谢你,这对刚开始学习c语言真的很有帮助。我仍然不知道c语言的诀窍,但请练习“变得完美”。@bobthemac是的,它确实如此。不过,我有一句忠告;适当缩进,必要时使用大括号。它将删除许多错误源,尤其是在启动时。不管怎样,祝你好运与C;我认为值得学习:。他们检查的是文件的日期,而不是时间,所以我认为毫秒精度并不重要。这不是问题所在。当他找到一个符合他初始条件的文件时,他会复制所有的文件。他们检查的是文件的日期,而不是时间,所以我认为毫秒精度并不重要。这不是问题所在。只要找到一个符合他初始条件的文件,他就会复制所有的文件。