2012-09-11 17 views
6

estoy usando algo como esto:WIN32_FIND_DATA - Obtener la ruta absoluta

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); 

que imprime los nombres de cada archivo en el directorio relativo ./test/*.

¿Hay alguna forma de determinar la ruta absoluta de este directorio, como lo hace realpath() en Linux sin involucrar ninguna biblioteca de terceros como BOOST? Me gustaría imprimir la ruta absoluta a cada archivo.

+0

¿Está solicitando una ruta [UNC] (http://en.wikipedia.org/wiki/Uniform_Naming_Convention#Uniform_Naming_Convention)? –

+0

No creo que necesite una solución tan general. La ruta local debería funcionar bien por ahora (como en C: \ bla \ blabla \ etc). –

+0

No hay garantía de que haya una ruta local. –

Respuesta

9

Ver la función GetFullPathName.

+4

Específicamente, llame a 'GetFullPathName' en el directorio y combínelo con el nombre del archivo en' WIN32_FIND_DATA'. –

+0

@RaymondChen, y ¿cómo se hace eso? En mi caso (similar a la pregunta) tengo una ruta con comodines como una cadena, pero solo tengo identificadores para los archivos encontrados. Dado que la ruta puede contener comodines, un directorio puede no existir, por lo que de alguna manera necesito obtener el directorio padre del archivo encontrado y luego obtener la ruta completa para ese directorio. –

+1

@JavierMr Si tiene una nueva pregunta, publique una nueva pregunta. No sé a qué te refieres con "un directorio puede no existir". El directorio está justo allí: en './Test/*', el directorio es './Test'. Los comodines no están permitidos en la parte de directorio, por lo que obtener el directorio no requerirá que trates con comodines. –

4

Usted puede intentar GetFullPathName

O puede utilizar SetCurrentDirectory y GetCurrentDirectory. Es posible que desee guardar el directorio actual antes de hacer esto para poder volver luego a él.

En ambos casos, solo necesita obtener la ruta completa de su directorio de búsqueda. Las llamadas API son lentas. Dentro del ciclo, simplemente combina cadenas.

Cuestiones relacionadas