Klasörde belirli bir uzantıya sahip bir dosya bulun


93

Bir klasör yolu verildiğinde (gibi C:\Random Folder), içinde belirli bir uzantıya sahip olan bir dosyayı nasıl bulabilirim txt? Dizinde bir arama yapmam gerektiğini varsayıyorum *.txt, ancak bu aramayı ilk etapta nasıl başlatacağımdan emin değilim.

Yanıtlar:


183

Bak System.IO.Directorysınıf ve statik yöntemle GetFiles. Bir yolu ve bir arama modelini kabul eden bir aşırı yüklemeye sahiptir. Misal:

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

Teşekkürler! Tüm cevaplar iyiydi ama :) evet ... ilk böylece cevap
Dominic k

6
Uzantı txt_ gibi bir şey olursa bu işe yaramaz. Bir klasörde herhangi bir * .exe dosyası olup olmadığını belirlemeye çalışıyorum ve yalnızca bir * .exe_ dosyam var, ancak sorgu onu döndürüyor, bu doğru değil.
Adrian


Ne gibi adını taşıyordu tek bir dosya istiyorsanızmacos.txt
Prashant Pimpale

Herhangi bir uzantı olmadan tüm dosyaları bulmak istiyorum. Dosya türü "dosya" olan (uzantısız) dosyalarım var, bu dosyaları nasıl bulabilirim?
sohaiby


14

Aslında oldukça kolay. System.IO.DirectorySınıfı ile birlikte kullanabilirsiniz System.IO.Path. Şöyle bir şey (LINQ kullanmak bunu daha da kolaylaştırır):

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 bu teknikte de birçok varyasyon var. Filtreniz daha basitse, diğer cevaplardan bazıları daha basittir. Bu, gecikmeli numaralandırma (önemliyse) ve daha fazla kod pahasına daha esnek filtreleme avantajına sahiptir.


Bu işe koyduğun tüm ekstra çalışmalar için teşekkürler. Bununla birlikte, dizinde yalnızca bir metin dosyam olduğundan (programım tarafından çıkarıldı) sadece basit bir ifade için gidiyorum.
Dominic K

3

Aşağıdaki yöntem yalnızca belirli uzantılara sahip dosyaları döndürür (örneğin: .txt içeren dosya, .txt1 değil)

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));
    }

1

Anladığıma göre, bu iki şekilde yapılabilir:

1) Directory Class'ı Getfiles yöntemi ile kullanabilir ve gerekli uzantımızı kontrol etmek için tüm dosyalarda gezinebilirsiniz.

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

2) Dosya yolunu parametre olarak alan ve uzantıyı doğrulayan GetExtension Yöntemi ile Yol Sınıfını kullanabilirsiniz. Dosya yolunu elde etmek için, tek bir dosya getirecek ve doğrulama için kullanılabilecek dosya yolunu döndürecek bir döngü koşuluna sahip olmanız yeterlidir.

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

Not: Her iki mantık da döngü koşulunun içinde olmalıdır.


-1

Bu kodu, her tür uzantı dosyasıyla dosya okumak için kullanın.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.