я получаю сообщение об ошибке «System.Array не содержит определения для LastWriteTime» - PullRequest
1 голос
/ 04 февраля 2011

У меня проблема с моим кодом на 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);
        }
    }

любая помощь, которая может быть оказана, будет признательна, спасибо.

Ответы [ 7 ]

4 голосов
/ 04 февраля 2011

Что вы хотите сделать, это, вероятно, это?

        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);
            }
        }
2 голосов
/ 04 февраля 2011

Ну, fi - это массив, поэтому fi.LastWriteTime.Date == DateTime.Today.Date выдаст эту ошибку. Правильно.

Похоже, вы не используете возвращенные каталоги для чего-то еще, поэтому я не могу предложить «исправить».

0 голосов
/ 04 февраля 2011

Вы пропустите цикл:

 for (int i = 0; i < fi.Length; ++i)
 {
     if (fi[i].LastWriteTime.Date == DateTime.Today.Date)
     ...
 }
0 голосов
/ 04 февраля 2011

Вам нужно

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);
    }
}
0 голосов
/ 04 февраля 2011

Как уже говорилось, это свойство недопустимо для массива.Просто заключите ваше FileInfo в цикл foreach:

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);
   }
 }
0 голосов
/ 04 февраля 2011

Ошибка проста: вы используете 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);
            }
}
0 голосов
/ 04 февраля 2011

Вы вызываете LastWriteTime для массива, а массив не имеет этого свойства.

Вам необходимо вызвать LastWriteTime для членов массива, например,

fi[0].LastWriteTime

Или перебрать все файлы:

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