PDA

Visualizza la versione completa : [C] Come visualizzare il contenuto di una directory


AuéIC
06-06-2009, 14:27
Mi scuso per l'altro topic, ho usato la funzione cerca nel forum e non ho notato la data ^^

dovrei visualizzare il contenuto di una directory a video, il percorso deve essere fisso all'interno del codice, mi interessa solo visualizzare il contenuto di una cartella specifica e basta, come posso fare?

I fie contenuti nella cartella che dovrei visualizzare sono dei .bin e .txt

PS: uso windows xp

oregon
06-06-2009, 15:23
Devi visualizzare solamente il nome dei file ?

Usa le API FindFirstFile/FindNextFile

http://msdn.microsoft.com/en-us/library/aa365200(VS.85).aspx

AuéIC
06-06-2009, 16:02
si si, solo l'elenco dei file presenti nella cartella...

dò un occhiata a quel codice, grazie ;)

YuYevon
06-06-2009, 16:17
Non sarebbe meglio ricorrere a soluzioni portabili quando possibile? :]

dirent.h (http://opengroup.org/onlinepubs/007908799/xsh/dirent.h.html)



#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main(void)
{
DIR *dp;
struct dirent *dir_p;

dp = opendir(/*directory*/);

if ( dp == NULL )
exit(1);

while( ( dir_p = readdir(dp) ) != NULL )
printf("%s\n", dir_p -> d_name);

closedir(dp);

return 0;
}

shodan
06-06-2009, 18:21
Originariamente inviato da YuYevon
Non sarebbe meglio ricorrere a soluzioni portabili quando possibile? :]


A me VC++ 2008 Express da errore se uso quell'header, quindi proprio portabile non è.

MItaly
06-06-2009, 18:49
Originariamente inviato da YuYevon
Non sarebbe meglio ricorrere a soluzioni portabili quando possibile? :]

dirent.h è POSIX, non ANSI C, e quindi non è portabile su sistemi non POSIX (su Windows a ben vedere esiste un sottosistema POSIX, ma non è particolarmente utilizzato).

YuYevon
06-06-2009, 18:52
In effetti wikipedia dice



dirent.h is the header in the C POSIX library for the C programming language that contains constructs that facilitate directory traversing. The function is not part of the C standard, but is considered "pseudo-standard" and is reliably portable between platforms.


però appunto in generale non dovrebbe dare problemi di portabilità, e comunque di certo molto meno delle API di Windows :°D

Tra l'altro, compilando quel codice su XP con Dev non ho alcun problema...

Gorgia666
30-08-2009, 12:25
Originariamente inviato da YuYevon
Non sarebbe meglio ricorrere a soluzioni portabili quando possibile? :]

dirent.h (http://opengroup.org/onlinepubs/007908799/xsh/dirent.h.html)



#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main(void)
{
DIR *dp;
struct dirent *dir_p;

dp = opendir(/*directory*/);

if ( dp == NULL )
exit(1);

while( ( dir_p = readdir(dp) ) != NULL )
printf("%s\n", dir_p -> d_name);

closedir(dp);

return 0;
}


scusate a me non funziona.
come directory ho messo la stringa.
"/test_images/caps/"
con il percorso a partire dalla directory di lavoro.
Nel debug se guardo il risultato dir_p -> d_name vedo:
caps~\0\0\0\b\362\b\30\0$\351o.\24\0\bimg0.bmp\0\3 66\b\30\0\370\321t2\20\0\bcaps\0\363\b\30\0\264\23 5\242K\24\0\bimg1.bmp\0\r\300\27\0\233T1S\20\0\4.. \0\0\4\364\b\30\0\232A\353]\24\0\bimg5.bmp\0\357\b\30\0B\246\301_\24\0\bimg3. bmp\0\360\b\30\0\270\20'l\24\0\bimg2.bmp\0\356\b\3 0\0\373p\bs\20\0\4.\0\0\0\4\361\b\30\0\377\377\377 \177\24\0\bimg4.bmp", '\0' <repeats 79 times>

La directory è presente e i file che vedete nell'ultima stringa sono accessibili inserendo sempicemente il percorso completo.
Non mi da alcun errore fino alla stampa del file, che non riesce a fare per mancanza di un carattere.
Lavoro su Fedora 11 con ll'ultimo eclipse cdt.
Mi sapreste spiegare perché?

Loading