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.

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


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 .


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:


4

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.