2012-06-13 11 views
5

Mam następujący kod, otrzymuję błąd w „if”, mówiąc, że FileInfo nie zawiera definicji „Zawiera”Jak wiemy, czy macierz FileInfo [] zawiera plik

co jest najlepszym rozwiązaniem dla sprawdzanie, czy plik znajduje się w katalogu?

Dzięki

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

Już przeniósł pliki do wyniku, po prostu nie chcą sprawdzić teraz zawartość wyniku? –

+3

jesteś queryng filelist dla wyniku, a następnie w jaki sposób fileList nie zawierać wynik? –

+0

Czy chcesz sprawdzić, czy plik * any * znajduje się w katalogu lub czy * konkretny * plik znajduje się w katalogu? –

Odpowiedz

13

Usuń fileList.Contains(result) i zastosowanie:

if (result.Any()) 
{ 

} 

.Any() LINQ to słowo kluczowe dla ustalenia, czy wynik ma żadnych przedmiotów w nim, czy nie. Trochę jak robi .Count() > 0, z wyjątkiem quicker. Przy .Any(), po znalezieniu elementu sekwencja nie jest już wyliczana, ponieważ wynikiem jest True.

W rzeczywistości, można usunąć ostatnie pięć linijek kodu z from file in... do dołu, zastępując ją:

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

} 
3

można sprawdzić liczbę wyniku

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

tak, jest to prosty sposób na zrobienie tego. – kmxillo

0

Jak o to, poniższy kod da ci listę plików (pełna nazwa jako ciąg); powodem, dla którego zwracana jest lista, ponieważ podkatalogi mogą mieć taką samą nazwę pliku jak "test.txt".

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

jeśli jesteś bardzo pewny „test.txt” plik będzie tylko w jednym katalogu, można użyć:

string fullname = Directory.EnumerateFiles(@"c:\temp\", "test.txt", 
        SearchOption.AllDirectories).FirstOrDefault(); 
if (fullname != null) { ..... } 
Powiązane problemy