2010-06-30 11 views
69

Dato un percorso di cartella (come C: \ cartella casuale), come posso trovare un file che contiene una determinata estensione, come txt? Presumo che dovrò fare una ricerca per * .txt nella directory, ma non sono sicuro di come suppongo di iniziare questa ricerca, in primo luogo.Trova un file con una certa estensione nella cartella

risposta

127

Vedere la classe System.IO.Directory 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"); 
+0

Grazie! Tutte le risposte erano buone, ma prima hai risposto così ... sì :) – DMan

+4

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

+1

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

22

Si potrebbe utilizzare la classe di Directory

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

Questo non funziona se l'estensione sarebbe qualcosa come txt_ o qualsiasi altra cosa come indicato in la documentazione https://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx –

13

E 'abbastanza facile, in realtà. È possibile utilizzare la classe System.IO.Directory insieme a System.IO.Path. Qualcosa di simile (utilizzando LINQ rende ancora più facile):

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

Ci sono molte varianti su questa tecnica anche, naturalmente. Alcune delle altre risposte sono più semplici se il tuo filtro è più semplice. Questo ha il vantaggio dell'enumerazione ritardata (se questo è importante) e un filtraggio più flessibile a spese di più codice.

+0

Grazie per tutto il lavoro extra che ci hai dedicato. Tuttavia, sto andando solo per una semplice affermazione dato che ho solo un file di testo nella directory (è stato estratto dal mio programma). – DMan

1

il seguente metodo restituisce solo i file con determinate estensioni (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)); 
    } 
0

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

1) È possibile utilizzare Directory Class con il metodo Getfiles e attraversare tutti i file per verificare la nostra estensione richiesta.

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

2) È possibile utilizzare classe Path con il metodo GetExtension che prende percorso del file come parametro e verifica l'extension.To ottenere il percorso del file, basta avere una condizione di loop che recuperare un singolo file e restituire il percorso del file che può essere utilizzato per la verifica.

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

Nota: Sia la logica deve essere all'interno di una condizione di loop.

-1

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

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*"); 
Problemi correlati