Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    8

    [C] acquisizione nomi cartelle e file

    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

  2. #2
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    ciao,

    per ottenere tutti i file di una directory guarda qui

    invece per avere l'elenco delle macro x distinguere i file dalle carte vedi un pò qui in fondo troverai le specifiche per dirent.h

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

    facci sapere

    il secondo è il primo degli ultimi

  4. #4
    Sta lavorando su Windows XP, e, come spiegato, dirent.h esiste solo su sistemi POSIX.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    a me funziona a meraviglia

    nn so x l'altro link se funziona
    il secondo è il primo degli ultimi

  6. #6
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    8
    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

  8. #8
    siccome lo devo usare unicamente io e quindi nn ho problemi di portabilita pensavo di usare il comando:
    Fai le cose per bene invece:
    codice:
    #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];
    if(!SHGetSpecialFolderPath(NULL,percorso,CSIDL_DESKTOPDIRECTORY,TRUE))
    {
        fputs("Errore: impossibile ottenere la directory del destkop.", stderr);
        /* esci in qualche modo */
    }
    if(!PathAppend(percorso,ListaNomi[indice]))
    {
        fputs("Errore: impossibile costruire il percorso della directory di destinazione", stderr);
        /* esci in qualche modo */
    }
    if(!CreateDirectory(percorso, NULL))
    {
        DWORD errore=GetLastError();
        if(errore!=ERROR_ALREADY_EXISTS)
            fprintf(stderr, "Impossibile creare la cartella, errore 0x%8x.",errore);
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    8
    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?!?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Stai lavorando in UNICODE?

    Se non è tua intenzione, modifica l'opzione apposita nelle proprietà del progetto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.