LINQ dan direktori file (C#)

Banyak operasi sistem file pada dasarnya adalah kueri dan oleh karena itu sangat cocok untuk pendekatan LINQ.

Kueri di bagian ini tidak merusak. Mereka tidak digunakan untuk mengubah konten file atau folder asli. Hal ini mengikuti aturan bahwa kueri tidak boleh menyebabkan efek samping apa pun. Secara umum, kode apa pun (termasuk kueri yang melakukan operator buat / perbarui / hapus) yang mengubah data sumber harus dipisahkan dari kode yang hanya mengkueri data.

Bagian ini berisi topik berikut:

Cara mengkueri untuk file dengan atribut atau nama tertentu (C#)
Memperlihatkan cara mencari file dengan memeriksa satu atau beberapa properti objek FileInfonya.

Cara mengelompokkan file berdasarkan ekstensi (LINQ) (C#)
Menunjukkan cara menampilkan grup objek FileInfo berdasarkan ekstensi nama file mereka.

Cara mengkueri jumlah total byte dalam sekumpulan folder (LINQ) (C#)
Menunjukkan cara menampilkan jumlah total byte dalam semua file dalam pohon direktori tertentu.

Cara membandingkan konten dua folder (LINQ) (C#)s
Memperlihatkan cara mengembalikan semua file yang ada dalam dua folder tertentu, dan juga semua file yang ada dalam satu folder tetapi tidak yang lain.

Cara mengkueri untuk file terbesar atau file di pohon direktori (LINQ) (C#)
Menunjukkan cara menampilkan file terbesar atau terkecil, atau jumlah file tertentu, dalam pohon direktori.

Cara mengkueri file duplikat di pohon direktori (LINQ) (C#)
Menunjukkan cara mengelompokkan semua nama file yang terjadi di lebih dari satu lokasi dalam pohon direktori tertentu. Juga menunjukkan cara melakukan perbandingan yang lebih kompleks berdasarkan pembanding kustom.

Cara mengkueri konten file dalam folder (LINQ) (C#)
Menunjukkan cara mengulang melalui folder dalam pohon, membuka setiap file, dan mengkueri konten file.

Komentar

Ada beberapa kompleksitas yang terlibat dalam pembuatan sumber data yang secara akurat mewakili konten sistem file dan menghandel pengecualian dengan anggun. Contoh dalam bagian ini membuat kumpulan snapshot objek FileInfo yang mewakili semua file di bawah folder akar tertentu dan semua subfoldernya. Status aktual masing-masing FileInfo dapat berubah dalam waktu antara saat Anda memulai dan mengakhiri eksekusi kueri. Misalnya, Anda dapat membuat daftar objek FileInfo untuk digunakan sebagai sumber data. Jika Anda mencoba mengakses properti Length dalam kueri, objek FileInfo akan mencoba mengakses sistem file untuk memperbarui nilai Length. Jika file tidak ada lagi, Anda akan mendapatkan FileNotFoundException dalam kueri Anda, meskipun Anda tidak mengkueri sistem file secara langsung. Beberapa kueri dalam bagian ini menggunakan metode terpisah yang menggunakan pengecualian khusus ini dalam kasus tertentu. Opsi lain adalah mempertahankan sumber data Anda tetap diperbarui secara dinamis dengan menggunakan FileSystemWatcher.