2016-03-21 35 views
2

ile Directory.EnumerateFiles filtrelemek için nasıl böyle bir klasördeki tüm xml dosyalarının bir listesini istiyorum XXX herhangi bir karakteri temsil eder, sonra sayımın bir parçası olurlar.özel uzantı

ise

foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml").Where(x => x.EndsWith(".xml"))) 

gibi bir şey yaparak kolayca çözebilir Ama temelde aynı şey için iki kez aramak zorunda gibi, bana biraz tuhaf görünüyor. Doğru dosyaları doğrudan almanın bir yolu var mı yoksa yanlış bir şey mi yapıyorum? Eğer 3 karakter uzatma için EnumerateFiles kullanarak bunu yapamam gibi

cevap

3

en iyi çözüm gibi görünüyor dosya arama ile joker kullanımının belgelenmiş/varsayılan davranıştır.

belirtilen uzantısı üç karakter uzunluğunda tam ise

Directory.EnumerateFiles Method (String, String)

, yöntem belirtilen uzantılı başlar uzantılı dosyaları döndürür. Örneğin, "* .xls" hem "book.xls" hem de "book.xlsx" değerini döndürür.

Geçerli filtreleme yaklaşımınız iki kez doğru yoldur. Düzgün belgeleri okuyarak değil bende olmasına

x.EndsWith(".xml", StringComparison.CurrentCultureIgnoreCase) 
+0

utanç: Yapabileceğiniz

tek gelişme gibi EndsWith davayı göz ardı etmektir. iyileştirme için teşekkürler – Daltons

1

O

böyle "gibi bir searchPattern yıldız işareti joker karakter kullanın

yukarıdaki makaleden MSDN

Alıntı göre görünüyor .txt ", belirtilen uzantıdaki karakter sayısı, aramayı aşağıdaki gibi etkiler: Belirtilen uzantı tam olarak üç karakter uzunluğundaysa, yöntem belirtilen uzantıyla başlayan uzantılara sahip dosyalar döndürür. Örneğin, " .xls" hem "book.xls" hem de "book.xlsx" değerini döndürür. Diğer tüm durumlarda, yöntem belirtilen uzantıyla tam olarak eşleşen dosyaları döndürür. Örneğin, ".ai", "file.ai" değerini döndürür, ancak "file.aif" değerini döndürmez. Soru işareti joker karakterini kullandığınızda, bu yöntem yalnızca belirtilen dosya uzantısıyla eşleşen dosyaları döndürür. Örneğin, bir dosyada "file1.txt" ve "file1.txtother" olmak üzere iki dosya verildiğinde "file? .txt" 'in bir arama modeli sadece ilk dosyayı döndürürken, " .txt dosyası" her iki dosyayı da döndürür.

nedenle .Where uzantısını kullanarak

sorununuza