2013-04-12 16 views
5

Mam ten kod podstawowyDirectory.GetFiles() searchpattern

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

W filePath jest plik o nazwie Filename.OUT

Powyższy kod wyszukuje tego pliku grzywny.

Teraz zmieniam nazwę pliku, dołączając identyfikator UniqueID, aby plik nie został ponownie pobrany.

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

Jednak plik jest nadal uzyskiwanie zabierani przez Directory.GetFiles()!

Czy zatem wzór wyszukiwania (*.OUT) jest wzorem regularnym? Jeśli tak, to ma to sens.

Informacje na temat MSDN nie wydają się sugerować, że tak. Jeśli nie, czy istnieje wzór, którego mogę użyć, aby go nie odebrać?

Odpowiedz

3

Sam musiałem sobie z tym poradzić podczas pracy z monitorem systemu plików. Dodanie na co MichaelPerrenoud powiedział Można uruchomić wszystkie swoje mecze przez szybki filtr, takich jak:

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

Jeśli nie potrzebują elastyczności targetext, wystarczy zastąpić go całkowicie z ".OUT"

powodzenia!

+0

+1. Jest to dobra metoda rozszerzenia. –

3

Jest to oczekiwane zachowanie, ponieważ w dokumencie związana stwierdza:

A searchPattern z rozszerzeniem plików dokładnie trzech znaków zwraca pliki posiadające rozszerzenie trzech lub więcej znaków, gdzie pierwsze trzy znaki dopasuj rozszerzenie pliku określone w searchPattern.

ale w przeciwieństwie stwierdza:

A searchPattern z rozszerzenia pliku z jednego, dwóch lub więcej niż trzech znaków zwraca tylko pliki posiadające rozszerzenia dokładnie tej długości, które odpowiadają rozszerzenie pliku określonego w searchPattern.

, więc w twoim przypadku zamierzasz mieć, aby odfiltrować wyniki. Chciałbym, żeby było inaczej. Jest to problem dla wielu osób, nawet dla mnie samego.

2

Można rozebrać-out (podciąg) ciąg wejściowy o długości 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); 

i pracować z wyniku, jak zwykle:

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.

Powiązane problemy