Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中复制具有特定日期的文件_C#_File_Date_Copy - Fatal编程技术网

C# 如何在c中复制具有特定日期的文件

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

我的代码有一个问题,我可以让它复制一个目录及其子目录中的所有文件,我有一个if语句,告诉它如果修改日期与今天相同,则复制一个文件,但它仍然复制了我在internet上搜索的所有文件以寻求解决方案,它们都给出了类似的模糊答案我已经拥有的doe我已经在下面粘贴了代码

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;我认为值得学习:。他们检查的是文件的日期,而不是时间,所以我认为毫秒精度并不重要。这不是问题所在。当他找到一个符合他初始条件的文件时,他会复制所有的文件。他们检查的是文件的日期,而不是时间,所以我认为毫秒精度并不重要。这不是问题所在。只要找到一个符合他初始条件的文件,他就会复制所有的文件。