จะแสดงรายการไฟล์ในไดเร็กทอรีในโปรแกรม C ได้อย่างไร?


91

ฉันพยายามเขียนเซิร์ฟเวอร์ ftp บน Linux ในเรื่องนี้ฉันจะแสดงรายการไฟล์ในไดเร็กทอรีบนเทอร์มินัลโดยโปรแกรม C ได้อย่างไร? บางทีฉันอาจใช้ฟังก์ชัน exec เพื่อเรียกใช้คำสั่ง find แต่ฉันต้องการชื่อไฟล์เป็นสตริงเพื่อส่งโปรแกรมไคลเอนต์ ฉันจะทำเช่นนี้ได้อย่างไร?

ขอบคุณสำหรับคำตอบ

คำตอบ:


178

ตัวอย่างพร้อมใช้งานสำหรับระบบที่รองรับ POSIX:

ระวังว่าการดำเนินการดังกล่าวขึ้นอยู่กับแพลตฟอร์มในภาษา C

ที่มา: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046380353&id=1044780608


ตอนนี้ก็โอเคและง่ายมาก ขอบคุณสำหรับคำตอบอีกครั้ง
cemal

13
โปรดตรวจสอบหากคุณชอบ;)
Jean-Bernard Jansen

1
เยี่ยมมาก แต่ถ้าเราต้องการเฉพาะpngไฟล์ล่ะ?
Farsheed

2
@Farsheed: ลองนี้
ashastral

ฉันพบปัญหาเล็กน้อยเกี่ยวกับเรื่องนี้ อันดับแรก "." และ ".. " จะปรากฏที่ด้านบนสุดของทุกไดเรกทอรีและแม้ว่าจะเป็น "ไดเรกทอรี" แต่ก็มี dir-> d_type ตั้งค่าเป็น DT_REG นอกจากนี้ดูเหมือนว่าฉันจะไม่ได้รับไฟล์ทั้งหมด ... มีโค้ด "ไดเร็กทอรีสแกนเนอร์" ที่ครอบคลุมกว่านี้หรือไม่ บางทีการใช้ "ls" ของคนยากจน ฉันต้องการสิ่งนี้บน Mac - OS-X
Motti Shneor

36

อีกหนึ่งคำตอบของ JB Jansen - ในreaddir()ลูปหลักฉันจะเพิ่มสิ่งนี้:

เพียงตรวจสอบว่าเป็นไฟล์จริงๆไม่ใช่ลิงก์ (sym) ไดเร็กทอรีหรืออะไรก็ตาม

หมายเหตุ: ข้อมูลเพิ่มเติมเกี่ยวกับstruct direntในเอกสารlibc


6
เพียงแค่กัน: ไม่ใช่ทุกแพลตฟอร์มที่จะกรอกข้อมูลd_typeแต่ Linux และ BSD จะ (ฉันรู้ว่าคำถามนั้นติดแท็ก Linux เพียงแค่ขยายคำตอบเล็กน้อย) ถึงอย่างนั้นระบบไฟล์บางระบบไม่ได้รับการสนับสนุนอย่างสม่ำเสมออย่างไรก็ตามควรใช้งานได้กับ FS ส่วนใหญ่
omninonsense

11

นี่คือโปรแกรมที่สมบูรณ์ในการแสดงรายการเนื้อหาของโฟลเดอร์แบบวนซ้ำ:


4

โค้ดด้านล่างนี้จะพิมพ์เฉพาะไฟล์ภายในไดเร็กทอรีและไม่รวมไดเร็กทอรีภายในไดเร็กทอรีที่กำหนดขณะเดินทาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.