2010-06-30 18 views
69

Bir klasör yolu (C: \ Random Klasörü gibi) verildiğinde, içinde txt gibi belirli bir uzantıya sahip bir dosyayı nasıl bulabilirim? Dizinde * .txt için bir arama yapmak zorunda kalacağım, ancak bu aramayı ilk etapta nasıl başlatacağımı bilmiyorum.Klasörde belirli bir uzantıya sahip bir dosya bulun

cevap

127

System.IO.Directory sınıfına ve GetFiles statik yöntemine bakın. Bir yolu ve bir arama modelini kabul eden bir aşırı yük var. Örnek:

string[] files = System.IO.Directory.GetFiles(path, "*.txt"); 
+0

Teşekkürler! Bütün cevaplar iyiydi, ama önce cevap verdin ... evet :) – DMan

+4

Eğer uzantı txt_ gibi bir şeyse işe yaramaz. Bir klasörde herhangi bir * .exe dosyası olup olmadığını belirlemeye çalışıyorum ve sadece bir * .exe_ dosyası var, ancak sorgu, doğru değil, onu döndürür. – Adrian

+1

Belgeler: https://msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx –

22

Sen Directory sınıf

Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories) 
+2

Uzantı, txt_ gibi bir şey ya da belgelere https://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx –

13

Bu oldukça kolay aslında kullanabilirsiniz. sınıfını System.IO.Path ile birlikte kullanabilirsiniz. Böyle bir şey (kullanarak LINQ daha da kolay hale getirir):

var allFilenames = Directory.EnumerateFiles(path).Select(p => Path.GetFileName(p)); 

// Get all filenames that have a .txt extension, excluding the extension 
var candidates = allFilenames.Where(fn => Path.GetExtension(fn) == ".txt") 
          .Select(fn => Path.GetFileNameWithoutExtension(fn)); 

elbette çok bu tekniği birçok varyasyonu vardır. Filtreniz daha basitse diğer cevaplardan bazıları daha basittir. Bu, gecikmiş numaralandırma (bu önemliyse) ve daha fazla kod pahasına daha esnek filtreleme avantajına sahiptir. Belirli uzantılı

+0

Bunu eklediğiniz tüm ekstra işler için teşekkürler. Ancak, sadece bir metin dosyasına sahip olduğumdan (programım tarafından çıkarılmıştı) sadece basit bir açıklama yapacağım. – DMan

1

getiri altında yöntem yalnızca dosyaları (örn: .txt dosya değil .txt1):

benim anlayış gereğince

public static IEnumerable<string> GetFilesByExtension(string directoryPath, string extension, SearchOption searchOption) 
    { 
     return 
      Directory.EnumerateFiles(directoryPath, "*" + extension, searchOption) 
       .Where(x => string.Equals(Path.GetExtension(x), extension, StringComparison.InvariantCultureIgnoreCase)); 
    } 
0

, bu iki şekilde yapılabilir 1) Dizin Sınıfı'nı Getfiles yöntemiyle kullanabilir ve gerekli uzantılarımızı kontrol etmek için tüm dosyalara geçebilirsiniz.

Directory.GetFiles ("your_folder_path) [i] .Contains (" *. Txt ")

2) Bir parametre ve doğrular olarak dosya yolunu alır GetExtension Yöntemi ile Yol Class kullanabilirsiniz extension.To dosya yolunu almak, sadece tek bir dosya getirmesi ve doğrulama için kullanılabilir dosyayolu dönecektir bir döngü durumunu var.

Path.GetExtension (your_file_path) .Equals ("json")

Not: Her iki mantık da döngü koşulunda olmalıdır.

-1

Tüm kod dosya türleriyle birlikte bu dosya için bu kodu kullanın.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*"); 
İlgili konular