Temukan file dengan ekstensi tertentu di folder

93

Diberikan jalur folder (seperti C:\Random Folder), bagaimana saya dapat menemukan file di dalamnya yang memiliki ekstensi tertentu, seperti txt? Saya berasumsi bahwa saya harus melakukan pencarian *.txtdi direktori, tetapi saya tidak yakin bagaimana saya harus memulai pencarian ini.

Dominic K
sumber

Jawaban:

180

Lihatlah System.IO.Directorykelas dan metode statisnya GetFiles. Ini memiliki kelebihan yang menerima jalur dan pola pencarian. Contoh:

 string[] files = System.IO.Directory.GetFiles(path, "*.txt");
Anthony Pegram
sumber
Terima kasih! Semua jawaban bagus, tapi Anda menjawab lebih dulu jadi ... ya :)
Dominic K
6
Ini tidak berfungsi jika ekstensinya seperti txt_. Saya mencoba untuk menentukan apakah ada file * .exe dalam sebuah folder, dan saya hanya memiliki satu file * .exe_, tetapi kueri mengembalikannya, yang mana tidak benar.
Adrian
Bagaimana jika saya ingin file tunggal yang bernama sepertimacos.txt
Prashant Pimpale
Saya ingin mencari semua file tanpa ekstensi apa pun. Saya memiliki beberapa file dengan jenis file "file" (tanpa ekstensi), bagaimana cara menemukan file tersebut?
sohaiby
31

Anda dapat menggunakan kelas Direktori

 Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories)
sgriffinusa.dll
sumber
3
Ini tidak berfungsi jika ekstensinya seperti txt_ atau apa pun seperti yang dinyatakan dalam dokumentasi msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx
Randall Flagg
14

Sebenarnya cukup mudah. Anda dapat menggunakan System.IO.Directorykelas bersama dengan System.IO.Path. Sesuatu seperti (menggunakan LINQ membuatnya lebih mudah):

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

Ada banyak variasi teknik ini juga, tentunya. Beberapa jawaban lain lebih sederhana jika filter Anda lebih sederhana. Yang ini memiliki keuntungan dari pencacahan yang tertunda (jika itu penting) dan penyaringan yang lebih fleksibel dengan mengorbankan lebih banyak kode.

Greg D
sumber
Terima kasih atas semua kerja ekstra yang Anda lakukan untuk ini. Namun, saya hanya menggunakan pernyataan sederhana karena saya hanya memiliki satu file teks di direktori (itu diekstraksi oleh program saya).
Dominic K
3

Metode di bawah ini hanya mengembalikan file dengan ekstensi tertentu (misalnya: file dengan .txt tetapi tidak .txt1)

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));
    }
hazjack
sumber
1

Sesuai pemahaman saya, ini dapat dilakukan dengan dua cara:

1) Anda dapat menggunakan Kelas Direktori dengan metode Getfiles dan melintasi semua file untuk memeriksa ekstensi yang kami butuhkan.

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

2) Anda dapat menggunakan Path Class dengan Metode GetExtension yang mengambil path file sebagai parameter dan memverifikasi ekstensi. Untuk mendapatkan path file, cukup memiliki kondisi perulangan yang akan mengambil satu file dan mengembalikan filepath yang dapat digunakan untuk verifikasi.

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

Catatan: Kedua logika harus berada di dalam kondisi perulangan.

Pulkit Shah
sumber
-1

Gunakan kode ini untuk membaca file dengan semua jenis file ekstensi.

string[] sDirectoryInfo = Directory.GetFiles(SourcePath, "*.*");
Vishal Prajapati
sumber