2017-11-18 1 views
-1

私のコンピュータに最新のテキストファイルを取得しようとしています。 コンピュータの各ドライブに行き、すべてのテキストファイルを検索し、最新のファイルを1つだけ取得する必要があります。コンピュータのすべてのドライブを検索した後に最新のテキストファイルを取得する方法

私は、ドライブのすべての最新のファイルは、「メソッドの

try 
     { 
      foreach (DriveInfo d in DriveInfo.GetDrives()) 
      { 
       var X = GetLatestFiles(d.Name, "*.txt"); 

      } 
     } 
     catch (Exception ex) { Console.WriteLine(ex); } 


public static FileInfo GetLatestFiles(string path, string searchPattern) 
    { 
     return Directory.EnumerateFiles(path, searchPattern).Union(
      Directory.EnumerateDirectories(path).SelectMany(d => 
      { 
       try 
       { 
        return GetLatestFiles(d, searchPattern); 
       } 
       catch (UnauthorizedAccessException) 
       { 
        return Enumerable.Empty<String>(); 
       } 
      })).OrderByDescending(f => (f == null ? DateTime.MinValue : f.LastWriteTime)).FirstOrDefault(); 
    } 

エラー

型引数を仕事やないと確信して1エラーを取得し、いくつかのコードを試してみましたもないEnumerable.SelectMany (IEnumerable、Func>) ' を使用から推測することはできません。型引数 を明示的に指定してみてください。 ConsoleApp1 C:\ Users \ユーザーH190733 \ソース\レポ\ ConsoleApp1 \ ConsoleApp1アクティブProgram.csを43 \

+1

をデバッグしますあなたが処理する必要があるディレクトリのリストと、FileInfo変数を、それぞれのフォルダ内にリストし、addの内容をリストアップしてください。これは、LINQを使用していないと思います。フォルダをリストの末尾に置いて、すべてのファイルをリストし、フォルダ内で最高の日付のfileinfoを探します。日付がfileinfo変数よりも新しい場合新しいファイルインフォを比較するループにする –

答えて

0

私は思う(これはiPhone、申し訳ありませんにテストすることは本当に難しいです)、もしあなた

return (FileInfo)null; 
代わりに

return Enumerable.Empty<String>(); 

その後、エラーが消えます。

.SelectMany<FileInfo>にも電話する必要があります。私のコメントは立っています。これはドライブ全体を検索するひどい方法です。 C#のに次の擬似コードを変換すると、私の推薦次のようになります。

//declare list<directoryinfo> dirs 
//declare FileInfo latestText 

//load all drives into the dirs list 

//loop over the list with "while the list has more entries" type loop 
while(dirs.Count>0){ 
    // load all the directories in dirs[0] onto the end of the list 

    //For each fileinfo in dirs[0] if the create time 
    //is more recent than latestText createTime, 
    //set latestText to that fileinfo 

    //remove first entry from dirs 

} 

「あなたがなりのdirsを検索としてのdirsのリストの最後に追加し続ける多くの方が簡単すぎる

0
 FileInfo newestTextFile = null; 
     foreach (DriveInfo d in DriveInfo.GetDrives()) 
     { 
      var root = d.RootDirectory; 
      var files = root.EnumerateFiles("*.txt", SearchOption.AllDirectories); 
      forearch (var file in files) 
      { 
       if (newestTextFile == null || file.LastAccessTime > newestTextFile.LastAccessTime) 
       { 
        newestTextFile = file; 
       } 
      } 
     } 
関連する問題