2012-06-13 9 views
5

he el siguiente código, que recibirá un error en el "if", diciendo que FileInfo no contiene una definición de "Contiene"¿Cómo saber si la matriz FileInfo [] contiene un archivo

¿Cuál es la mejor solución para mirando si un archivo está en un directorio?

Gracias

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

Ya movido los archivos en consecuencia, no te quiere para verificar el contenido del resultado ahora? –

+3

está preguntando lista de archivos para el resultado, entonces ¿cómo puede fileList no contener el resultado? –

+0

¿Está buscando ver si * cualquier * archivo está en un directorio o si un archivo * específico * está en un directorio? –

Respuesta

13

quitar fileList.Contains(result) y uso:

if (result.Any()) 
{ 

} 

.Any() es una palabra clave para determinar si LINQ resultado tiene ningún artículo en él o no. Me gusta hacer un .Count() > 0, excepto quicker. Con .Any(), tan pronto como se encuentra un elemento, la secuencia ya no se enumera, ya que el resultado es True.

De hecho, se podría eliminar los últimos cinco líneas de su código de from file in... a la parte inferior, sustituyéndolo por:

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

} 
3

se puede comprobar la cuenta de resultado

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

sí, es una forma sencilla de hacerlo. – kmxillo

0

¿Qué tal esto, el código a continuación le dará una lista de archivos (nombre completo como una cadena); la razón por la cual el retorno es una lista es porque sus subdirectorios pueden tener el mismo nombre de archivo que 'test.txt'.

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

si está muy seguro 'test.txt' archivo será sólo en uno de los directorios, puede utilizar:

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