1

我的 c# 代码有问题我似乎无法让我的 if 语句工作我认为它出于某种原因试图引用错误的代码部分。我检查了我有所有正确的引用和所有正确的用途。我已经粘贴了下面的违规代码:

FolderBrowserDialog dlg2 = new FolderBrowserDialog();
if (dlg2.ShowDialog() == DialogResult.OK)
//do whatever with dlg.SelectedPath
{

    string searchPattern = "*";
    DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath);
    DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath);

    DirectoryInfo dir = new DirectoryInfo(dlg.SelectedPath);
    FileInfo[] fi = dir.GetFiles("*", SearchOption.AllDirectories);
    {
        if (fi.LastWriteTime.Date == DateTime.Today.Date)
        {
            FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories);
            for (int i = 0; i < sourceFiles.Length; ++i)
                File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
        }
    }

任何可以提供的帮助将不胜感激。

4

7 回答 7

4

你想做的大概是这个?

        FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories);
        foreach (FileInfo fi in fis)
        {
            if (fi.LastWriteTime.Date == DateTime.Today.Date)
            {
                FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories);
                for (int i = 0; i < sourceFiles.Length; ++i)
                    File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
            }
        }
于 2011-02-04T12:32:11.070 回答
2

好吧,fi是一个数组,所以fi.LastWriteTime.Date == DateTime.Today.Date会给出那个错误。正确。

您似乎没有将返回的目录用于其他任何内容,因此我无法建议“修复”。

于 2011-02-04T12:30:12.083 回答
0

错误很简单,您LastWriteTime在数组而不是 FileInfo 项上使用。您应该像这样在代码中使用索引:

fi[0].LastWriteTime.Date  ///your code

用您的索引编号替换 0 或在 foreach 循环中使用它,如下所示:

foreach(var item in fi)
{
            if (item.LastWriteTime.Date == DateTime.Today.Date)
            {
                FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories);
                for (int i = 0; i < sourceFiles.Length; ++i)
                    File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
            }
}
于 2011-02-04T12:31:18.013 回答
0

如前所述,此属性在数组上无效。只需使用 foreach 循环将您的 FileInfo 括起来:

foreach(FileInfo fi in dir.GetFiles("*", SearchOption.AllDirectories))
{
  if (fi.LastWriteTime.Date == DateTime.Today.Date)
  {
     FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories);
     for (int i = 0; i < sourceFiles.Length; ++i)
       File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
   }
 }
于 2011-02-04T12:33:21.883 回答
0

您正在数组上调用 LastWriteTime,而数组没有此属性。

您需要在数组成员上调用 LastWriteTime,例如

fi[0].LastWriteTime

或者遍历所有文件:

foreach(var file in fi) 
{
   if(file.LastWriteTime.Date == DateTime.Today.Date)
   {
       ....
   }
}
于 2011-02-04T12:30:53.920 回答
0

你需要

foreach(FileInfo fi in dir.GetFiles("*", SearchOption.AllDirectories))
{
    if (fi.LastWriteTime.Date == DateTime.Today.Date)
    {
        FileInfo[] sourceFiles = source.GetFiles(searchPattern, SearchOption.AllDirectories);
        for (int i = 0; i < sourceFiles.Length; ++i)
            File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true);
    }
}
于 2011-02-04T12:34:59.920 回答
0

你错过了一个 for 循环:

 for (int i = 0; i < fi.Length; ++i)
 {
     if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
     ...
 }
于 2011-02-04T12:39:59.230 回答