Encuentra un archivo con una determinada extensión en la carpeta

92

Dada una ruta de carpeta (como C:\Random Folder), ¿cómo puedo encontrar un archivo que tenga una determinada extensión, como txt? Asumo que tendré que hacer una búsqueda*.txt en el directorio, pero no estoy seguro de cómo se supone que debo comenzar esta búsqueda en primer lugar.

Dominic K
fuente

Respuestas:

177

Mira la System.IO.Directoryclase 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");
Anthony Pegram
fuente
¡Gracias! Todas las respuestas fueron buenas, pero respondiste primero, así que ... sí :)
Dominic K
6
Esto no funciona si la extensión fuera algo 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 cual no es correcto.
Adrian
¿Qué pasa si quiero el archivo único que se llama comomacos.txt
Prashant Pimpale
Quiero encontrar todos los archivos sin ninguna extensión. Tengo algunos archivos con el tipo de archivo "archivo" (sin extensión), ¿cómo puedo encontrar esos archivos?
sohaiby
14

De hecho, es bastante fácil. Puede usar la System.IO.Directoryclase junto con System.IO.Path. Algo como (usar LINQ lo hace 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));

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

Greg D
fuente
Gracias por todo el trabajo extra que pusiste en esto. Sin embargo, solo voy por una declaración simple ya que solo tengo un archivo de texto en el directorio (fue extraído por mi programa).
Dominic K
3

El método siguiente devuelve solo los archivos con cierta extensión (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));
    }
hazjack
fuente
1

Según tengo entendido, esto se puede hacer de dos maneras:

1) Puede usar la clase de directorio 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) Puede usar la clase de ruta con el método GetExtension que toma la ruta del archivo como parámetro y verifica la extensión. Para obtener la ruta del archivo, solo tenga una condición de bucle que obtendrá un solo archivo y devolverá la ruta del archivo que se puede usar 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.

Pulkit Shah
fuente
-1

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

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Vishal Prajapati
fuente