Bagaimana cara membuat daftar file dalam direktori dalam program C?

91

Saya mencoba menulis server ftp di Linux. Dalam hal ini bagaimana saya dapat membuat daftar file dalam direktori pada terminal dengan program C? Mungkin saya dapat menggunakan fungsi exec untuk menjalankan perintah find tetapi saya ingin nama file sebagai string untuk mengirim program klien. Bagaimana saya bisa melakukan ini?

Terima kasih atas jawabannya.

cemal
sumber

Jawaban:

178

Contoh, tersedia untuk sistem yang sesuai dengan POSIX:

Berhati-hatilah karena operasi semacam itu bergantung pada platform di C.

Sumber: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046380353&id=1044780608

Jean-Bernard Jansen
sumber
tidak apa-apa sekarang dan sangat mudah. Terima kasih atas jawabannya lagi.
cemal
13
mohon validasi jika Anda menyukainya;)
Jean-Bernard Jansen
1
Hebat, Tapi bagaimana jika kita hanya menginginkan pngfile?
Farsheed
2
@Farsheed: coba ini .
ashastral
Saya menemui sedikit masalah dengan ini. Pertama, "." dan ".." muncul di bagian atas setiap direktori, dan meskipun mereka adalah "direktori", dir-> d_type disetel ke DT_REG. Juga, sepertinya saya tidak mendapatkan semua file ... Apakah ada kode "pemindai direktori" yang lebih komprehensif di suatu tempat? Mungkin penerapan "ls" yang dilakukan orang malang? Saya membutuhkan ini di Mac - OS-X
Motti Shneor
36

Satu tambahan kecil untuk jawaban JB Jansen - di readdir()loop utama saya akan menambahkan ini:

Hanya memeriksa apakah itu benar-benar file, bukan tautan (sym), direktori, atau apa pun.

CATATAN: lebih lanjut tentang struct direntdalam libcdokumentasi .

Kamiccolo
sumber
6
Sekadar tambahan: Tidak semua platform akan diisi d_type, tetapi Linux dan BSD akan (saya tahu pertanyaannya adalah Linux, hanya memperluas jawaban sedikit); meskipun demikian, tidak semua filesystem didukung secara seragam , namun ia harus bekerja dengan kebanyakan FS.
omninonsense
11

Berikut adalah program lengkap cara daftar isi folder secara rekursif:

Faroq AL-Tam
sumber
4

Kode di bawah ini hanya akan mencetak file dalam direktori dan mengecualikan direktori dalam direktori tertentu saat melakukan traverse.

Kegembiraan
sumber