Trova un file con una certa estensione nella cartella


92

Dato un percorso di cartella (come C:\Random Folder), come posso trovare un file al suo interno che contiene una certa estensione, come txt? Presumo che dovrò fare una ricerca *.txtnella directory, ma non sono sicuro di come dovrei iniziare questa ricerca in primo luogo.

Risposte:


177

Guarda la System.IO.Directoryclasse e il metodo statico GetFiles. Ha un sovraccarico che accetta un percorso e un modello di ricerca. Esempio:

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

Grazie! Tutte le risposte erano buone, ma hai risposto prima quindi ... sì :)
Dominic K

6
Questo non funziona se l'estensione fosse qualcosa come txt_. Sto cercando di determinare se ci sono file * .exe in una cartella e ho solo un file * .exe_, ma la query lo restituisce, il che non è corretto.
Adrian


E se volessi il file singolo che si chiama comemacos.txt
Prashant Pimpale

Voglio trovare tutti i file senza alcuna estensione. Ho alcuni file con tipo di file "file" (senza estensione), come posso trovare quei file?
sohaiby


14

È abbastanza facile, in realtà. Puoi usare la System.IO.Directoryclasse insieme a System.IO.Path. Qualcosa come (l'uso di LINQ lo rende ancora più semplice):

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

Naturalmente ci sono anche molte varianti di questa tecnica. Alcune delle altre risposte sono più semplici se il tuo filtro è più semplice. Questo ha il vantaggio dell'enumerazione ritardata (se importante) e di un filtro più flessibile a scapito di più codice.


Grazie per tutto il lavoro extra che ci metti. Tuttavia, sto solo per una semplice dichiarazione poiché ho solo un file di testo nella directory (è stato estratto dal mio programma).
Dominic K

3

Il metodo seguente restituisce solo i file con una certa estensione (ad esempio: file con .txt ma non .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

Secondo la mia comprensione, questo può essere fatto in due modi:

1) Puoi usare Directory Class con il metodo Getfiles e attraversare tutti i file per controllare la nostra estensione richiesta.

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

2) È possibile utilizzare la classe Path con il metodo GetExtension che prende il percorso del file come parametro e verifica l'estensione.Per ottenere il percorso del file, è sufficiente disporre di una condizione di ciclo che recupera un singolo file e restituisce il percorso del file che può essere utilizzato per la verifica.

Path.GetExtension (your_file_path) .Equals (". Json")

Nota: entrambe le logiche devono essere all'interno di una condizione di loop.


-1

Usa questo codice per leggere file con tutti i tipi di file di estensione.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.