2014-10-13 15 views
0

에서 전체 경로를 얻기 나는 WIN32_FIND_DATA 내 코드에서 전체 경로를 받고 도움이 필요합니다. 하지만 경로 (../art/*.dds)와 파일 이름을 더할 수 없습니다. 하위 폴더를 어떻게 확인할 수 있습니까? 또는 이미 그렇게합니까?WIN32_FIND_DATA

현재 코드 : 당신은 스캔 한 디렉토리를 알고

WIN32_FIND_DATA FindData; 
HANDLE hFind; 

hFind = FindFirstFile(L"../art/*.dds", &FindData); 

if(hFind == INVALID_HANDLE_VALUE) 
{ 
    PrintCharS("Error searching directory"); 
    return; 
} 

do 
{ 

    char ch[260]; 
    char DefChar = ' '; 
    WideCharToMultiByte(CP_ACP, 0, FindData.cFileName, -1, ch, 260, &DefChar, NULL); 

    string ss(ch); 

    // Just incase they're needed 
    DWORD retval=0; 
    BOOL success; 
    TCHAR buffer[4096]=TEXT(""); 
    TCHAR buf[4096]=TEXT(""); 
    TCHAR** lppPart={NULL}; 

    LPSTR buffeer = ""; 
    LPSTR* lpppPart = NULL; 

    retval = GetFullPathNameA(ch, 4096, buffeer, lpppPart); 

    if (retval == 0) 
    { 
     std::exit(1); 
    } 
    else 
    { 

     LoadFile(/ Expected WCHAR* \); 

    } 

} 
while(FindNextFile(hFind, &FindData) > 0); 

답변

1

, 발견 된 디렉토리 내에서 항목을 선택합니다. 파일을 추가하여 원래 검색과 동일한 범위의 파일 이름을 얻습니다. ../art/something.dds. 현재 디렉토리가 변경되지 않았다면 기본 OpenFile 호출로 내려 가면 작동합니다. 그러나 실제로 정규화 된 파일 이름이 필요한 경우 해당 부분 이름으로 GetFullPathName으로 전화하십시오.

P.

char ch[260]; 
⋮ 
if (ch != "invalid.dds") 

은 작동하지 않습니다. 주소를 비교하고 있으므로 은 항상을 테스트하며 내용과 일치하지 않습니다.ch입니다.

+0

나는 완전히 바보 같으며 작업에 지쳤지만 실제로 작동해야한다. 나는 어떻게해야하는지 예제가 필요하다. GetFullPathName 함수를 시도했지만 경로의 맨 첫 글자를 제외하고 나에게 아무 것도주지 않는 것 같습니다. – SpecialLUANewbie

+0

@SpecialLUANewbie 첫 글자 : 유니 코드 (UTF-16)를 내보내는 것처럼 들리지만 ANSI (8 비트)로 처리하므로 들으실 수 있습니다. {L, AB, ... 대신에 {64, 0, 65, 0, ...}'매크로와 UNICODE #define을 피하고,'GetFullPathNameW' (- * W * 해당 설정이 일치하지 않는 경우 –

+0

WideCharToMultiByte 결과를 전달하는 경우 컨텍스트가 -W 형식을 사용하므로 정규화되지 않은 GetFullPathName과 함께 작동하지 않습니다. ch를 GetFullPathNameA에 전달하거나 원본을 GetFullPathNameW에 전달합니다. –