2014-06-05 10 views
11

Dize olmayan dosya yol dizisi dizisi almak istiyorum. Yardımcı olurlarsa, uzantıları olmayan ikili dosyalardır. Örneğin C# uzantıları olmayan sadece dosyaların dosya yollarını edin

, ben (hayır .* hiçbir .txt, hiçbir .csv)

/test/

Bir uzantısı yok sadece yolunu ve dosya adlarını istediğiniz bir klasörden dışarı dosya yolları bir grup yükleme am

/test/dontWant.txt

/test/dontWant.csv

/test/doWant

i yaparsak:

String[] paths = Directory.GetFiles(fDir, "*.*", SearchOption.AllDirectories); 

Tabii o dizinlerde şeyi olsun.

Sonra çalışırsanız:

String[] paths= Directory.GetFiles(fDir, "*", SearchOption.AllDirectories); 

Hala bu dizinde her şeyi elde edecektir.

Uzantısı olmayan dosyaların dosyalarını almanın bir yolu var mı? kullanılarak "*."


çalışma yaptı ve ben ile başlayan bu deneyin vermedi neden bilmiyorum.

Başlamak için EnumerateFiles kullanıyor olmalıydım.

+2

ile bu joker kullanabileceğiniz bu joker

String[] paths = Directory.GetFiles(fDir, "*.", SearchOption.AllDirectories); 

ile deneyebilirsiniz. ", SearchOption.AllDirectories); – Grundy

+0

@Grundy Nope. Bir nokta ile biten herhangi bir dosya adı olurdu. Böyle bir dosya bilmiyorum! – tnw

+0

@tnw, deniyor musun ??? – Grundy

cevap

11

Bu yardımcı olacaktır:

var filesWithoutExtension = System.IO.Directory.GetFiles(@"D:\temp\").Where(filPath => String.IsNullOrEmpty(System.IO.Path.GetExtension(filPath))); 
foreach(string path in filesWithoutExtension) 
{ 
    Console.WriteLine(path); 
} 

Bu uzantısı/o sadece belirtilen dir w tüm dosyaları dönecektir. Kullanmanız gereken tüm alt dizinleri eklemek isterseniz: System.IO.Directory.GetFiles(@"D:\temp\", "*", SearchOption.AllDirectories).

GÜNCELLEME
adamlar önerildiği gibi, daha az ram tüketir çünkü Directory.EnumerateFiles kullanmak daha iyidir.

+0

Bu kod bir patron gibi çalışır. Sadece bir konsol uygulamasında test ettim. Directory.EnumerateFiles' için – Shiva

8

Üzerinde bir 2. geçiş filtresi yapmanız gerekecektir.

//If you are using .NET 3.5 you can still use GetFiles, EnumerateFiles will just use less ram. 
String[] paths = Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories) 
          .Where(file => Path.GetFileName(file) == Path.GetFileNameWithoutExtension(file)) 
          .ToArray(); 

Peki yapar o olanların her ikisi de aynı dizeyi dönerseniz GetFileName ve GetFileNameWithoutExtension nedeniyle, daha sonra dizideki sonucu da içeren dosya yolunu geçirir olduğunu.

+1

+1 ve daha az ram kullanın. –

2

aleksey.berezan'ın yanıtına bir alternatif olarak, .NET 4 + 'da aşağıdakileri yapabilirsiniz. EnumerateFiles, dosyaları dizin ağacında yer değiştirdikçe döndürür.

foreach(var file in Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories).Where(s => string.IsNullOrEmpty(Path.GetExtension(s)))) 
{ 

} 
21

Ayrıca `String [] yolları = Directory.GetFiles (FDIR, "* deneyin Directory.EnumerateFiles

Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories); 
+0

Bu kesinlikle daha fazla vermeyi hak ediyor. – Habib

İlgili konular