2012-06-13 20 views
5

が含まれているかどうかを知るためにどのように、私はのために最適なソリューションですアレイのFileInfo []は、私は次のコードを持っているファイル

「を含みます」のFileInfoは定義が含まれていないことを言って「if文」のエラーが表示されますファイルがディレクトリにあるかどうかを調べる

おかげ

string filePath = @"C:\Users\"; 
DirectoryInfo folderRoot = new DirectoryInfo(filePath); 
FileInfo[] fileList = folderRoot.GetFiles(); 

IEnumerable<FileInfo> result = from file in fileList where file.Name == "test.txt" select file; 
if (fileList.Contains(result)) 
{ 
     //dosomething 
} 
+2

あなたは既に結果にファイルを移動し、あなただけの必要はありません今すぐ結果の内容を確認するには? –

+3

あなたは結果のファイルリストをqueryngしていますが、どのようにfileListに結果が含まれていないのですか? –

+0

*すべての*ファイルがディレクトリにあるか、*特定の*ファイルがディレクトリにあるかどうかを調べたいですか? –

答えて

13

fileList.Contains(result)と使用を削除します。

if (result.Any()) 
{ 

} 

.Any()結果はその中の任意の項目を持っているかどうかを判断するためのLINQのキーワードです。 quickerを除いて、.Count() > 0のようなもの。 .Any()の場合、要素が見つかるとすぐに、結果はTrueなので、シーケンスはもはや列挙されません。

実際には、あなたがそれを置き換える、下にfrom file in...からあなたのコードの最後の5行を削除することができます:あなたは、結果の数を確認することができ

if (fileList.Any(x => x.Name == "test.txt")) 
{ 

} 
3

if (result.Count() > 0) 
{ 
    //dosomething 
} 
+0

@notfedはい、これは簡単な方法です。 – kmxillo

0

方法について以下のコードは、ファイルのリスト(文字列としてのフルネーム)を表示します。なぜあなたのサブディレクトリが 'test.txt'と同じファイル名を持つかもしれないからです。

var list = Directory.EnumerateFiles(@"c:\temp\", "test.txt", 
      SearchOption.AllDirectories); 

あなたは「test.txtの」ファイルのみ、ディレクトリの一つに、あなたが使用することができます非常に確信している場合:

string fullname = Directory.EnumerateFiles(@"c:\temp\", "test.txt", 
        SearchOption.AllDirectories).FirstOrDefault(); 
if (fullname != null) { ..... } 
関連する問題