Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++]FindFirstFile e FindNextFile

    salve a tutti, vorrei avere un codice che mi legga tutte le cartelle,i file e le sottocartelle presenti nell'unità C.
    So che vanno usate le API FindFirst e FindNext, ed ho arrangiato un codice per leggere tutti i file e le sottocartelle presenti in "C:\" solo che non riesco ad entrare nelle rispettive sottocartelle e leggere i file.
    Ho cercato per il web, ma non riesco proprio a capire come fare. Msdn l'ho riletto un migliaio di volte.Suggerimenti?
    Ecco il codice:
    codice:
    #include <windows.h>
    #include <iostream>
    int main()
    {
        using namespace std;
    HANDLE hFind;
    WIN32_FIND_DATA FindData;
    // Find the first file
    hFind = FindFirstFile("C:\\*.*", &FindData);
    /*file process*/
    cout << FindData.cFileName << endl;
    // Look for more
    while (FindNextFile(hFind, &FindData))
    {
    /*file process*/
    cout << FindData.cFileName << endl;
    }
    // Close the file handle
    FindClose(hFind);
    system("pause");
    return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: [C++]FindFirstFile e FindNextFile

    Originariamente inviato da niccolò1234
    Msdn l'ho riletto un migliaio di volte.Suggerimenti?
    Forse ti sarebbe bastato leggerla un'altra volta ...

    http://msdn.microsoft.com/en-us/libr...sktop/aa365200(v=vs.85).aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Devi fare una ricerca ricorsiva... isola il codice di ricerca in una funzione che riceve il path della directory da elaborare; ogni volta che incontra una sottodirectory (le distingui dai file perché per le directory FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY !=0), oltre a stamparla la funzione richiamerà sé stessa passando come parametro la nuova cartella da esaminare.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Oregon avevo già trovato quel codice ma, compilandolo, mi da il seguente errore:

    C:\Users\Desktop\Untitled4.cpp `StringCchLength' undeclared (first use this function)

    Però la libreria "strsafe.h" è dichiarata, quindi non riesco a capirne il motivo :S

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    strsafe.h non è una libreria ma un semplice file include

    La libreria è la strsafe.lib ...

    In ogni caso, anche senza le librerie di stringhe in questione ma usando quelle normali e il suggerimento di MItaly, dovresti riuscire ad impostare il codice ricorsivo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Ah chiedo scusa ma non avevo letto il suo messaggio. Scusa ancora.
    Comunque il problema è che io ho una conoscenza base di c++,e tutte le guide purtroppo sono in inglese ed i codici non sono commentati.
    L'argomento da passare sarebbe quello in "argcv[]"?
    Che di volta in volta registra quindi la cartella che deve scansionare?

  7. #7
    Ho elaborato il seguente codice..ma mi chiedo come posso far si che venga passato il nome della cartella come parametro di ricerca..e anche far si che una volta trovata la sottocartella, i file presenti nella cartella madre vengano letti lo stesso. Suggerimenti? Ecco il programma principale con relativo sottoprogramma.
    Main
    codice:
    #include <iostream>
    #include <windows.h>
    using namespace std;
    void ricerca();
    int main (){
       
    HANDLE hFind;
    WIN32_FIND_DATA FindData;
    // Find the first file
    hFind = FindFirstFile("C:\\*.*", &FindData);
    /*file process*/
    cout<<"===MAIN==="<<endl;
    
    cout << FindData.cFileName << endl;
    // Look for more
    while (FindNextFile(hFind, &FindData))
    {
          while (FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY!=0){ //se trova una cartella richiama "ricerca"
                ricerca();
                }
    /*file process*/
    cout << FindData.cFileName << endl;
    }
    // Close the file handle
    FindClose(hFind);
    
    
    system("pause");
    }
    Ricerca
    codice:
    #include <windows.h>
    #include <iostream>
    void ricerca()
    {
        using namespace std;
    HANDLE hFind;
    WIN32_FIND_DATA FindData;
    // Find the first file
    cout<<"===RICERCA==="<<endl;
    hFind = FindFirstFile("C:\\*.*", &FindData);
    /*file process*/
    cout << FindData.cFileName << endl;
    // Look for more
    while (FindNextFile(hFind, &FindData))
    {
    /*file process*/
    cout << FindData.cFileName << endl;
    }
    // Close the file handle
    FindClose(hFind);
    
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.