2010-06-30 34 views
69

Dada una ruta de carpeta (como C: \ Carpeta aleatoria), ¿cómo puedo encontrar un archivo que contenga una cierta extensión, como txt? Supongo que tendré que hacer una búsqueda de * .txt en el directorio, pero no estoy seguro de cómo se supone que debo comenzar esta búsqueda en primer lugar.Buscar un archivo con una cierta extensión en la carpeta

Respuesta

127

Observe la clase System.IO.Directory y el método estático GetFiles. Tiene una sobrecarga que acepta una ruta y un patrón de búsqueda. Ejemplo:

string[] files = System.IO.Directory.GetFiles(path, "*.txt"); 
+0

¡Gracias! Todas las respuestas fueron buenas, pero primero respondiste así que ... sí :) – DMan

+4

Esto no funciona si la extensión sería algo así como txt_. Estoy tratando de determinar si hay algún archivo * .exe en una carpeta, y solo tengo un archivo * .exe_, pero la consulta lo devuelve, lo que no es correcto. – Adrian

+1

La documentación: https://msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx –

22

Usted podría utilizar la clase Directory

Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories) 
+2

Esto no funciona si la extensión sería algo como txt_ o cualquier otra cosa como se indica en la documentación https://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx –

13

Es bastante fácil, en realidad. Puede usar la clase System.IO.Directory junto con System.IO.Path. Algo así como (usando LINQ hace que sea aún más fácil):

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p)); 

// Get all filenames that have a .txt extension, excluding the extension 
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt") 
          .Select(fn => Path.GetFileNameWithoutExtension(fn)); 

Hay muchas variaciones sobre esta técnica también, por supuesto. Algunas de las otras respuestas son más simples si su filtro es más simple. Éste tiene la ventaja de la enumeración retrasada (si eso importa) y un filtrado más flexible a expensas de más código.

+0

Gracias por todo el trabajo extra que puso en esto. Sin embargo, solo estoy buscando una declaración simple ya que solo tengo un archivo de texto en el directorio (fue extraído por mi programa). – DMan

1

el método siguiente sólo devuelve los archivos con extensión determinada (por ejemplo: archivo con .txt pero no .txt1)

public static IEnumerable<string> GetFilesByExtension(string directoryPath, string extension, SearchOption searchOption) 
    { 
     return 
      Directory.EnumerateFiles(directoryPath, "*" + extension, searchOption) 
       .Where(x => string.Equals(Path.GetExtension(x), extension, StringComparison.InvariantCultureIgnoreCase)); 
    } 
0

Según mi entender, esto se puede hacer de dos maneras:

1) Puede usar Directory Class con el método Getfiles y recorrer todos los archivos para verificar nuestra extensión requerida.

Directory.GetFiles ("your_folder_path) [i] .Contains (" *. Txt ")

2) Se puede utilizar la clase Camino con getExtension método que toma la ruta del archivo como parámetro y verifica la extension.To obtener la ruta del archivo, simplemente tiene una condición de bucle que va a traer un solo archivo y devolver la ruta de archivo que puede ser utilizado para la verificación.

Path.GetExtension (your_file_path) .equals ("json")

Nota: Tanto la lógica tiene que estar dentro de una condición de bucle.

-1

Utilice este código para leer el archivo con todo tipo de archivo de extensión.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*"); 
Cuestiones relacionadas