2012-06-13 32 views
5

Tôi đã đoạn mã sau, tôi nhận được một lỗi tại "nếu tuyên bố" nói rằng FileInfo không chứa một định nghĩa "Chứa"Làm thế nào để biết nếu Mảng FileInfo [] chứa một tập tin

Đó là giải pháp tốt nhất cho tìm kiếm nếu một tập tin nằm trong một thư mục?

Cảm ơn

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

Bạn đã di chuyển các tập tin vào kết quả, bạn không chỉ muốn để kiểm tra nội dung của kết quả ngay bây giờ? –

+3

bạn truy vấn filelist cho kết quả, sau đó làm thế nào có thể fileList không chứa kết quả? –

+0

Bạn có muốn xem tập tin * any * có nằm trong thư mục hay không nếu tập tin * cụ thể * nằm trong một thư mục? –

Trả lời

13

Di fileList.Contains(result) và sử dụng:

if (result.Any()) 
{ 

} 

.Any() là một từ khóa LINQ để xác định liệu kết quả có bất kỳ mục trong nó hay không. Cũng giống như làm một số .Count() > 0, ngoại trừ quicker. Với .Any(), ngay sau khi một yếu tố được tìm thấy trình tự không còn được liệt kê, kết quả là True.

Trong thực tế, bạn có thể loại bỏ các năm dòng cuối cùng của mã của bạn từ from file in... xuống phía dưới, thay thế nó bằng:

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

} 
3

bạn có thể kiểm tra số lượng kết quả

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

có, đó là cách đơn giản để thực hiện. – kmxillo

0

Làm thế nào về điều này, mã dưới đây sẽ cung cấp cho bạn một danh sách các tập tin (fullname dưới dạng một chuỗi); lý do tại sao trở lại như một danh sách là vì các thư mục con của bạn có thể có cùng tên tệp như 'test.txt'.

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

nếu bạn đang rất chắc chắn 'test.txt' tập tin sẽ chỉ có một trong các thư mục, bạn có thể sử dụng:

string fullname = Directory.EnumerateFiles(@"c:\temp\", "test.txt", 
        SearchOption.AllDirectories).FirstOrDefault(); 
if (fullname != null) { ..... } 
Các vấn đề liên quan