Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengambil fail dengan pelbagai penapis menggunakan direktori.getFiles ()?
Mengambil Berbilang Jenis Fail dengan Cekap dengan Directory.GetFiles()
Kaedah Directory.GetFiles()
ialah alat yang berguna untuk menyenaraikan fail dalam direktori. Walau bagaimanapun, penapisan terbina dalam hanya membenarkan satu jenis fail pada satu masa. Artikel ini meneroka penyelesaian untuk mengatasi had ini dan mendapatkan semula fail yang sepadan dengan berbilang kriteria dalam satu operasi.
Cabaran: Penapisan Pelbagai Jenis Fail
Menggunakan Directory.GetFiles()
secara langsung untuk mendapatkan semula fail dengan berbilang sambungan (cth., .mp3 dan .jpg) tidak boleh dilakukan tanpa penyelesaian.
Penyelesaian:
Dua kaedah berkesan memintas had ini:
1. Memanfaatkan Directory.EnumerateFiles()
(.NET 4.0 dan lebih baru):
Directory.EnumerateFiles()
menawarkan pendekatan yang lebih cekap memori, terutamanya apabila berurusan dengan banyak fail. Ia berulang melalui fail tanpa memuatkan kesemuanya ke dalam memori sekaligus. Anda kemudiannya boleh menapis hasil menggunakan LINQ:
<code class="language-csharp">var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg")); </code>
Coretan kod ini mendapatkan semula semua fail dalam "C:path" (dan subdirektorinya) dan menapis hasil untuk memasukkan hanya fail .mp3 dan .jpg.
2. Penapisan Tersuai dengan Directory.GetFiles()
:
Untuk versi .NET yang lebih lama atau situasi yang EnumerateFiles()
tidak sesuai, anda boleh menggunakan GetFiles()
dengan penapis tersuai digunakan selepas itu:
<code class="language-csharp">var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>
Ini mencapai hasil yang sama seperti kaedah sebelumnya tetapi memuatkan semua fail ke dalam memori pada mulanya.
Pertimbangan Prestasi:
Walaupun kedua-dua kaedah mencapai hasil yang diingini, Directory.EnumerateFiles()
secara amnya diutamakan untuk kecekapan ingatannya, terutamanya apabila berurusan dengan direktori yang besar. Directory.GetFiles()
mungkin lebih pantas untuk direktori yang lebih kecil, tetapi overhed memori boleh menjadi ketara dengan banyak fail. Pilih kaedah yang paling mengimbangi prestasi dan penggunaan memori untuk aplikasi khusus anda.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengambil fail dengan pelbagai penapis menggunakan direktori.getFiles ()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!