【问题标题】:i get an error "System.Array does not contain a definition for LastWriteTime"我收到错误“System.Array 不包含 LastWriteTime 的定义”
【发布时间】:2011-06-21 08:12:58
【问题描述】:

我的 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);
        }
    }

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

【问题讨论】:

    标签: c# .net compiler-errors system.array


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你在数组上调用 LastWriteTime,而数组没有这个属性。

      您需要对数组的成员调用 LastWriteTime,例如

      fi[0].LastWriteTime
      

      或者遍历所有文件:

      foreach(var file in fi) 
      {
         if(file.LastWriteTime.Date == DateTime.Today.Date)
         {
             ....
         }
      }
      

      【讨论】:

        【解决方案3】:

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

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

        将 0 替换为您的索引 num 或在 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);
                    }
        }
        

        【讨论】:

          【解决方案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);
                      }
                  }
          

          【讨论】:

          • 我也想过这样的事情,但请注意fi 没有在循环内使用...
          • 这是一个好的开始,尽管现在的代码没有多大意义(如果所选文件夹中的文件的 LastWriteTime 等于今天,它会复制所有文件在源文件夹到目标文件夹)。不过,这显然是 OP 写的。
          • @Adam: 是的,我知道但没有多想... :-)
          【解决方案5】:

          如前所述,此属性在数组上无效。 只需用 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);
             }
           }
          

          【讨论】:

            【解决方案6】:

            你需要

            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);
                }
            }
            

            【讨论】:

              【解决方案7】:

              你错过了一个 for 循环:

               for (int i = 0; i < fi.Length; ++i)
               {
                   if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
                   ...
               }
              

              【讨论】:

                猜你喜欢
                • 2013-11-15
                • 2014-11-23
                • 2015-02-05
                • 2012-09-29
                • 2015-07-24
                • 1970-01-01
                • 1970-01-01
                • 2014-12-19
                • 2021-08-16
                相关资源
                最近更新 更多