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.

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");

¡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.


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));
    }

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.


-1

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

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.