2013-04-12 9 views
5

Ho questo codice di baseDirectory.GetFiles() searchPattern

Directory.GetFiles(filepath, "*.OUT") 

Nel percorso file è un file chiamato Filename.OUT

Il codice di cui sopra rileva che lima fine.

Ora, rinominare il file aggiungendo un ID univoco in modo che il file non venga nuovamente prelevato.

Filename.OUT6F9619FF-8B86-D011-B42D-00C04FC964FF

Tuttavia, il file è ancora stato scelto su da Directory.GetFiles()!

Quindi, il modello di ricerca (*.OUT) è un motivo di regex? Se è così, questo ha senso.

Le informazioni su MSDN non sembrano implicare che lo siano. In caso contrario, esiste un modello che posso utilizzare in modo che non venga rilevato?

risposta

3

Ho dovuto occuparmene personalmente quando lavoro con un monitor di file system. L'aggiunta su quello che ha detto MichaelPerrenoud È possibile eseguire tutte le partite attraverso un filtro rapido, come:

bool ExtensionOf (String f, String targetext) { 
    return f.EndsWith(targetext); 
} 

Se non avete bisogno della flessibilità di targetext, basta sostituirlo interamente con ".OUT"

Buona fortuna!

+0

+1. Questo è un buon metodo di estensione da avere. –

3

Questo è il comportamento previsto perché nel documento si è collegato afferma:

Un searchPattern con un'estensione file di esattamente tre caratteri restituisce i file con una proroga di tre o più caratteri, dove i primi tre caratteri corrisponde all'estensione del file specificata in searchPattern.

ma al contrario afferma:

Un searchPattern con l'estensione di uno, due, o più di tre caratteri restituisce solo i file con le estensioni di esattamente quella lunghezza che corrispondono l'estensione del file specificato nel searchPattern.

Quindi nel tuo caso si sta andando ad avere per filtrare i risultati. Vorrei che fosse diverso. Questo è un problema per molte persone, incluso me stesso.

2

È possibile togliere-out (stringa) stringa di input dalla lunghezza della guid:

string fileName = "Filename.OUT"; 
string seed = "6F9619FF-8B86-D011-B42D-00C04FC964FF"; 
string input = fileName + seed; 
string result = input.Substring(0, input.Length - seed.Length); 
FileInfo file = new FileInfo(result); 
Console.WriteLine(file.Extension); 

e lavorare con risultato come solito:

private static string StripSeed(string input) 
{ 
    return input.Substring(0, input.Length - 36); // length of seed (guid) 
} 

Directory.EnumerateFile("*.*") 
     .Select(p => StripSeed(p)) 
     .Select(f => new FileInfo(f)) 
     .Where(fi => fi.Extesnsion.Equals(".OUT", StringComparison.OrdinalIgnoreCase)); 

Sandbox.

Problemi correlati