Come elencare i file in una directory in un programma C?


91

Sto cercando di scrivere un server ftp su Linux. In questo caso come posso elencare i file nella directory sul terminale da un programma C? Forse posso usare la funzione exec per eseguire il comando find ma voglio il nome del file come una stringa per inviare il programma client. Come posso fare questo?

Grazie per le risposte.

Risposte:


178

Un esempio, disponibile per sistemi compatibili con POSIX:

Attenzione che tale operazione dipende dalla piattaforma in C.

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


va bene adesso e così facile. Grazie ancora per la risposta.
cemal

13
per favore convalidalo se ti è piaciuto;)
Jean-Bernard Jansen

1
Ottimo, ma cosa succede se vogliamo solo pngfile?
Farsheed

2
@ Farsheed: prova questo .
ashastral

Ho riscontrato pochi problemi con questo. Primo, "." e ".." appaiono all'inizio di ogni directory, e sebbene siano "directory" hanno dir-> d_type impostato su DT_REG. Inoltre, non mi sembra di ottenere tutti i file ... C'è un codice di "directory scanner" più completo da qualche parte? Forse qualche implementazione da povera di "ls"? Ne ho bisogno su Mac - OS-X
Motti Shneor

36

Una piccola aggiunta alla risposta di JB Jansen : nel readdir()ciclo principale aggiungerei questo:

Sto solo controllando se è davvero un file, non un collegamento (sym), una directory o qualsiasi altra cosa.

NOTA: ulteriori informazioni struct direntnella libcdocumentazione .


6
Solo una d_typenota a parte: non tutte le piattaforme verranno compilate , ma Linux e BSD lo faranno (so che la domanda è contrassegnata come Linux, estendendo solo un po 'la risposta); anche in questo caso, non tutti i filesystem sono supportati in modo uniforme , tuttavia dovrebbe funzionare con la maggior parte degli FS.
omninonsense

11

Ecco un programma completo su come elencare in modo ricorsivo il contenuto della cartella:


4

Il codice seguente stamperà solo i file all'interno della directory ed escluderà le directory all'interno di una determinata directory durante l'attraversamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.