PDA

Visualizza la versione completa : [C] acquisizione nomi cartelle e file


bioxxx
24-06-2009, 18:49
Ciao a tutti,
volevo sapere se era possibile (lavorando con OS Windows XP) acquisire in linguaggio C il nome di una lista di cartelle all'interno di un altra e il nome di altri file all'interno delle singole cartelle.
Provo a spiegarmi meglio...io ho la seguente cartella principale:

C:\clienti

all'interno di questa cartella ho altre cartelle con vari nominativi:

C:\clienti\rossi mario
C:\clienti\bianchi carlo
C:\clienti\verdi gianni
...
...


e all'interno di ogni cartella ho dei file:

C:\clienti\rossi mario\CI.txt
C:\clienti\rossi mario\CF.txt
C:\clienti\rossi mario\libretto.jpg
...
...

ebbene vorrei acquisire solo i nomi e avere come output a video qualcosa del genere:

nome cliente: rossi mario
file associati: CI.txt , CF.txt, libretto.jpg

...

qualcuno di voi saprebbe indicarmi come fare per importare i nomi e scorrere all'interno delle varie cartelle???

un grazie anticipato...Fabio

MItaly
24-06-2009, 21:18
Usa le API FindFirstFile (http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx)/FindNextFile (http://msdn.microsoft.com/en-us/library/aa364428(VS.85).aspx)/FindClose (http://msdn.microsoft.com/en-us/library/aa364413(VS.85).aspx).

alphard
24-06-2009, 22:30
ciao,

per ottenere tutti i file di una directory guarda qui (http://forum.html.it/forum/showthread.php?s=&threadid=1336912&highlight=dirent.h)

invece per avere l'elenco delle macro x distinguere i file dalle carte vedi un pò qui (http://users.dimi.uniud.it/~davide.grohmann/data/files/lessons/labso/lezione6.pdf) in fondo troverai le specifiche per dirent.h

non le ho provate di mio ma credo ke dovrebbero funzionare.

facci sapere

:yuppi: :yuppi: :yuppi: :yuppi: :yuppi: :yuppi: :yuppi: :yuppi:

MItaly
24-06-2009, 23:16
Sta lavorando su Windows XP, e, come spiegato (http://forum.html.it/forum/showthread.php?s=&postid=12482909#post12482909), dirent.h esiste solo su sistemi POSIX.

alphard
24-06-2009, 23:23
a me funziona a meraviglia

nn so x l'altro link se funziona

MItaly
24-06-2009, 23:29
Originariamente inviato da alphard
a me funziona a meraviglia

Probabilmente stai utilizzando un compilatore che fornisce dirent.h, ma, ribadisco, non è una libreria standard disponibile su tutti i compilatori su Windows. Il metodo corretto per cercare file su Windows è utilizzando le apposite API, che ho indicato due post fa.

bioxxx
27-06-2009, 18:46
grazie a tutti ragazzi per le risposte utilissime...
volevo sfruttare ancora questo post per un problema riguardante la creazione di cartelle...
sto scrivendo un programmino che crea una lista di cartelle ed ogni cartella prende il nome da un buffer di stringhe...
siccome lo devo usare unicamente io e quindi nn ho problemi di portabilita pensavo di usare il comando:

system("MKDIR C:\\Users\\Fabio\\Desktop\\xxxx");

al posto di "xxxx" pero volevo inserire in runtime un nome preso dal buffer...
quindi supponendo di avere il buffer:

ListaNomi[SIZE]={"AppData","Program",......}

volevo creare sul desktop la cartella "AppData" passando come argomento "ListaNomi[0]"....

qualcuno saprebbe per caso indicarmi quale sia la giusta sintassi per farlo....

grazie ancora...Fabio

MItaly
27-06-2009, 22:06
siccome lo devo usare unicamente io e quindi nn ho problemi di portabilita pensavo di usare il comando:
Fai le cose per bene invece:


#include <windows.h>
#include <shlwapi.h>
#include <shlobj.h>
/* Nota: linkare con shlwapi.lib e shell32.lib */
/* ... */
const char * ListaNomi[]={"AppData", "Program" /* eccetera */};
char percorso[MAX_PATH (http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx)];
if(!SHGetSpecialFolderPath (http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx)(NULL,percorso,CSIDL_DESKTOPD IRECTORY (http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx),TRUE))
{
fputs("Errore: impossibile ottenere la directory del destkop.", stderr);
/* esci in qualche modo */
}
if(!PathAppend (http://msdn.microsoft.com/en-us/library/bb773565(VS.85).aspx)(percorso,ListaNomi[indice]))
{
fputs("Errore: impossibile costruire il percorso della directory di destinazione", stderr);
/* esci in qualche modo */
}
if(!CreateDirectory (http://msdn.microsoft.com/en-us/library/aa363855(VS.85).aspx)(percorso, NULL))
{
DWORD errore=GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx)();
if(errore!=ERROR_ALREADY_EXISTS)
fprintf(stderr, "Impossibile creare la cartella, errore 0x%8x.",errore);
}

bioxxx
07-07-2009, 10:27
Davvero grazie mille per l'ottimo consiglio...
l'unico problema che ho adesso è che a causa di "char percorso[MAX_PATH];" mi genera i seguenti errori (specifico che in questo momento sto lavorando su OS windows vista businness):

error C2664: 'SHGetSpecialFolderPathW' : cannot convert parameter 2 from 'char [260]' to 'LPWSTR'

error C2664: 'PathAppendW' : cannot convert parameter 1 from 'char [260]' to 'LPWSTR'

error C2664: 'CreateDirectoryW' : cannot convert parameter 1 from 'char [260]' to 'LPCWSTR'

quale può essere il motivo?!?

oregon
07-07-2009, 10:39
Stai lavorando in UNICODE?

Se non è tua intenzione, modifica l'opzione apposita nelle proprietà del progetto ...

Loading