2009-04-16 18 views
33

Come escludere il tipo di file quando si prelevano i file da una directory?Escludere determinate estensioni di file quando si prelevano file da una directory

ho cercato

var files = Directory.GetFiles(jobDir); 

Ma sembra che questa funzione può scegliere solo i tipi di file che si desidera includere, non escludere.

+0

duplicato di questo: http://stackoverflow.com/questions/163162/can-you-call-directory-getfiles-with-multiple-filters –

+3

No, non esattamente una vittima. – Graviton

+0

Possibile duplicato di [C#: ottieni un elenco di file esclusi quelli nascosti] (http://stackoverflow.com/questions/2418270/c-sharp-get-a-list-of-files-excluding-those-that- -sono nascosti) – TarmoPikaro

risposta

70

Si dovrebbe filtrare questi file da soli, è possibile scrivere qualcosa di simile:

var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml")); 
+0

Per quanto ne so ora EndsWith prende in considerazione le lettere maiuscole, il che significa che se il tipo di file fosse .XML non lo escluderebbe. –

+3

'var files = Directory.GetFiles (jobDir) .Where (name =>! Name.EndsWith (". Xml ", true));' –

+1

'var files = Directory.GetFiles (jobDir) .here (nome =>! name.EndsWith (". xml", StringComparison.OrdinalIgnoreCase)); ' – nothingisnecessary

0

Afaik non è possibile specificare i modelli di esclusione. Devi farlo manualmente, come:

string[] files = Directory.GetFiles(myDir); 
foreach(string fileName in files) 
{ 
    DoSomething(fileName); 
} 
+2

Grazie, ma farlo manualmente è qualcosa che non mi piace davvero – Graviton

+0

Forse è possibile ricavare la propria classe di directory dalla base System.IO.Directory se è possibile (non l'ho provata). – Biri

9

Credo che si può usare l'espressione lambda

var files = Array.FindAll(Directory.GetFiles(jobDir), x => !x.EndWith(".myext")) 
+0

Buona risposta, questo funziona per me –

11

Si potrebbe provare qualcosa di simile:

var allFiles = Directory.GetFiles(@"C:\Path\", ""); 
    var filesToExclude = Directory.GetFiles(@"C:\Path\", "*.txt"); 
    var wantedFiles = allFiles.Except(filesToExclude); 
+0

Funziona brillantemente in tutte le forme del comando GetFiles(). Non risolve la domanda con precisione, ma ottieni il vantaggio di sfruttare il parametro searchPattern, che è molto più potente del semplice controllo delle estensioni. –

+2

Consiglio: questo non funzionerà con il metodo di istanza 'DirectoryInfo.GetFiles()': restituisce una matrice di FileInfo (invece stringa), una classe non confrontabile/non equabile. –

-4
string[] filesToDelete = Directory.GetFiles(@"C:\Temp", "*.der"); 

foreach (string fileName in filesToDelete) 
{ 
    File.Delete(fileName); 
} 
+4

Chiaramente non hai letto la domanda. -1 –

+3

questa è la soluzione, ma molto radicale uno – miky

+1

lol. No modo per favore – Justin

0

Questa è la mia versione delle risposte che ho letto sopra

List<FileInfo> fileInfoList = ((DirectoryInfo)new DirectoryInfo(myPath)).GetFiles(fileNameOnly + "*").Where(x => !x.Name.EndsWith(".pdf")).ToList<FileInfo>(); 
6

lo so, questa una richiesta vecchia, ma su di me è sempre importante.

se si desidera exlude un elenco di estensione del file: (sulla base di https://stackoverflow.com/a/19961761/1970301)

var exts = new[] { ".mp3", ".jpg" }; 



public IEnumerable<string> FilterFiles(string path, params string[] exts) { 
    return 
     Directory 
     .GetFiles(path, SearchOption.AllDirectories) 
     .Where(file => !exts.Any(x => file.Extension.EndsWith(x, StringComparison.OrdinalIgnoreCase))); 
} 
3

Si può provare questo,

var directoryInfo = new DirectoryInfo("C:\YourPath"); 
var filesInfo = directoryInfo.GetFiles().Where(x => x.Extension != ".pdb"); 
0

mi sono imbattuto in questa ricerca di un metodo per fare questo in cui l'esclusione potrebbe utilizzare le regole del modello di ricerca e non solo la logica del tipo EndWith.

ad es. Corrispondenza con i caratteri jolly del modello di ricerca:

  • * (asterisco) Zero o più caratteri in quella posizione.
  • ? (punto interrogativo) Zero o un personaggio in quella posizione.

Questo potrebbe essere utilizzato per quanto sopra come segue.

string dir = @"C:\Temp"; 
var items = Directory.GetFiles(dir, "*.*").Except(Directory.GetFiles(dir, "*.xml")); 

Oppure per escludere articoli che altrimenti verrebbero inclusi.

string dir = @"C:\Temp"; 
var items = Directory.GetFiles(dir, "*.txt").Except(Directory.GetFiles(dir, "*HOLD*.txt")); 
Problemi correlati