2011-02-04 15 views
1

私のC#コードに問題があります。私のif文が正常に動作しないようです。間違った部分を参照しようとしています。何らかの理由でコードの私はすべての権利で参照し、すべての権利はで使用を持っていることを確認してきた私は怒鳴る問題のあるコードを貼り付けています。エラー "System.ArrayにLastWriteTimeの定義が含まれていません"

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

何だろう、このですか?

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

'そのfi'はループ内で使用されません... –

+0

これは良いコードですが、現在のコードはあまり意味がありません(選択されたフォルダ内のファイルが今日のLastWriteTimeを持つ場合、それはcopiソースフォルダ内のすべてのファイルをコピー先フォルダにコピーします)。しかし、これは明らかにOPが書いたものです。 –

+0

@アダム:はい、私はそれを認識していますが、それについてはあまり考えていませんでした... :-) –

2

まあ、fiは配列なので、fi.LastWriteTime.Date == DateTime.Today.Dateはそのエラーを示します。正しく。

返されたディレクトリを他のものに使用しているようではないので、私は「修正」を提案できません。

0

配列でLastWriteTimeを呼び出していて、配列にはこのプロパティがありません。

配列のメンバーでLastWriteTimeを呼び出す必要があります。

fi[0].LastWriteTime 

またはすべてのファイルを反復処理するために:

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

エラーがあなたの代わりのFileInfo項目の配列にLastWriteTimeを使用しているシンプルです。あなたはこのようなコードでインデックスを使用する必要があります。

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

あなたのインデックスnumが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); 
      } 
} 
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); 
    } 
} 
0

はあなたがmissinfある

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

そして 'fi'の機能は.... –

0

を必要とするforループ:私はあまりにもこのような何かを思ったが、気づく

for (int i = 0; i < fi.Length; ++i) 
{ 
    if (fi[i].LastWriteTime.Date == DateTime.Today.Date) 
    ... 
} 
関連する問題