2009-04-24 21 views
7

Zasadniczo mam ten kod:Dlaczego pliki DirectoryInfo.GetFiles() pasują do plików, które nie pasują do maski?

DirectoryInfo dir = new DirectoryInfo(@"\\MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806\"); 
FileInfo[] files = dir.GetFiles("200810*"); 

ja spodziewałem się, że pasują wszystkie pliki zaczynające się od 200810. Jednak to dopasowanie pliki o nazwie

20070618_00806.bak i 20070817_00806.bak (gwiazdy aren "t w nazwie pliku, to był jedyny sposób, w jaki mogłem zawrzeć podkreślenie)

Próbowałem go z dir z wiersza polecenia, a także pasuje do tych plików. Czemu?

Edit:

Może używając C: jako przykład nie jest rzeczą dobrą. Katalog nie mam faktycznie zapytań jest udział sieciowy \\ MYNETWORK11 \ ABCDEFG \ ABCDEFGHIJKL \ 00806 \

Jeśli sprawdzanie przeciwko krótkiej nazwy nie ma nic wspólnego z nim, 20070817_00806.bak być 200708 ~ 1. bak? Że nie pasuje albo

+0

Nie wyjaśnia to tego całkowicie, więc dodam tylko komentarz, ale znak _ jest znakiem specjalnym do celów dopasowywania. Umieść 2 w miejscu _ dla tych nazw plików, a ty podejdziesz trochę bliżej. –

+0

@Joel, czy mówisz _ jest specjalny w oknach lub w formatowaniu SO? – scottm

+0

Działa dla mnie. Stworzyłem plik o nazwie 20070618_00806.bak i uruchom "dir 200810 *" w folderze. Nie znaleziono plików. Czy czegoś brakuje? –

Odpowiedz

14

msdn stwierdza, że ​​

„ponieważ metoda sprawdza przeciwko nazw plików z zarówno nazwa formatu 8,3 plików i formatu długa nazwa pliku się szukaj wzór podobny do „*1*.txt” może zwrócić nieoczekiwane nazwy plików. na przykład, stosując wzór wyszukiwarkę „*1*.txt” powróci „longfilename.txt”, ponieważ równoważną 8,3 format nazwy pliku będzie być "longf~1.txt". "

Czy to może być przyczyną?

4

nie mogę odtworzyć tego, albo z linii poleceń lub w aplikacji testowej:

c:\Users\Jon\Test>echo > 20070618_00806.bak 

c:\Users\Jon\Test>echo > 2007081700806.bak 

c:\Users\Jon\Test>dir 200810* 
Volume in drive C is OS 
Volume Serial Number is B860-7E20 

Directory of c:\Users\Jon\Test 

File Not Found 

i app C#:

using System; 
using System.IO; 

class Test 
{ 
    static void Main() 
    { 
     foreach (var file in new DirectoryInfo(".").GetFiles("200810*")) 
     { 
      Console.WriteLine(file); 
     } 
    } 
} 

(To nie robi 't wydrukować żadnych wyników.)

Być może jest gdzieś jakieś ustawienie systemu operacyjnego, które ma znaczenie ... z jakiego systemu operacyjnego korzystasz? (Jestem na Vista 32-bit).

+0

@ Jon Windows XP – scottm

+0

To samo zachowanie również dla mnie. –

+0

Po uruchomieniu tego testu lokalnie działa zgodnie z oczekiwaniami. Próbowałem nawet na innym udziale sieciowym i działa zgodnie z oczekiwaniami. – scottm

1

GetFiles będzie szukać długiej nazwy pliku i krótkiej nazwy pliku ... nie pasuje to do krótkich nazw plików?

6

Spróbuj tego z wiersza poleceń:

dir /x 200810* 

„/ x” pozwoli pokazać krótkie nazwy plików, a także długie nazwy plików. Pozwoli to sprawdzić, czy krótka nazwa pliku zaczyna się od "200810".

Powiązane problemy