2012-09-11 26 views
6

sto usando qualcosa di simile:WIN32_FIND_DATA - Prendi il percorso assoluto

std::string tempDirectory = "./test/*"; 

WIN32_FIND_DATA directoryHandle; 
memset(&directoryHandle, 0, sizeof(WIN32_FIND_DATA));//perhaps redundant??? 

std::wstring wideString = std::wstring(tempDirectory.begin(), tempDirectory.end()); 
LPCWSTR directoryPath = wideString.c_str(); 

//iterate over all files 
HANDLE handle = FindFirstFile(directoryPath, &directoryHandle); 
while(INVALID_HANDLE_VALUE != handle) 
{ 
    //skip non-files 
    if (!(directoryHandle.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 
    { 
     //convert from WCHAR to std::string 
     size_t size = wcslen(directoryHandle.cFileName); 
     char * buffer = new char [2 * size + 2]; 
     wcstombs(buffer, directoryHandle.cFileName, 2 * size + 2); 
     std::string file(buffer); 
     delete [] buffer; 

     std::cout << file; 
    } 

    if(FALSE == FindNextFile(handle, &directoryHandle)) break; 
} 

//close the handle 
FindClose(handle); 

che stampa i nomi di ogni file nella directory relativa ./test/*.

C'è un modo per determinare il percorso assoluto di questa directory, proprio come fa realpath() su Linux senza coinvolgere alcuna libreria di terze parti come BOOST? Mi piacerebbe stampare il percorso assoluto per ogni file.

+0

Stai chiedendo un percorso [UNC] (http://en.wikipedia.org/wiki/Uniform_Naming_Convention#Uniform_Naming_Convention)? –

+0

Non credo che avrò bisogno di una soluzione così generale. Per ora il percorso locale dovrebbe andare bene (come in C: \ bla \ blabla \ etc). –

+0

Non c'è alcuna garanzia che ci sia un percorso locale. –

risposta

9

Vedere la funzione GetFullPathName.

+4

In particolare, chiama 'GetFullPathName' nella directory e combinalo con il nome del file in' WIN32_FIND_DATA'. –

+0

@RaymondChen e come è fatto? Nel mio caso (simile alla domanda) ho un percorso con caratteri jolly come stringa, ma ho solo maniglie per i file trovati. Poiché il percorso può contenere caratteri jolly, una directory potrebbe non esistere, quindi in qualche modo ho bisogno di ottenere la directory padre del file trovato e quindi ottenere il percorso completo per quella directory? –

+1

@ JavierMr Se hai una nuova domanda, si prega di inviare una nuova domanda. Non so cosa intendi per "una directory potrebbe non esistere". La directory è proprio lì: in './Test/*', la directory è './Test'. I caratteri jolly non sono consentiti nella porzione di directory, quindi ottenere la directory non richiederà di trattare i caratteri jolly. –

4

Si può provare GetFullPathName

Oppure si può usare SetCurrentDirectory e GetCurrentDirectory. Potresti voler salvare la directory corrente prima di fare questo in modo che tu possa tornare ad essa in seguito.

In entrambi i casi, è sufficiente ottenere il percorso completo della directory di ricerca. Le chiamate API sono lente. All'interno del ciclo si combinano solo stringhe.

Problemi correlati