从WIN32_FIND_DATA获取完整路径

时间:2014-10-13 20:22:52

标签: c++ performance wchar

我需要帮助从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);

    if (ch != "invalid.dds")
    {

        LoadFile( / Need WCHAR* that points to file \ );

    }

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

我真的花了一整天时间试图解决这个问题。 但我不能得到路径(../art/*.dds)加上文件名 另外我如何检查子文件夹?或者它已经这样做了吗?

当前代码:

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 个答案:

答案 0 :(得分:1)

您知道您扫描的目录以及找到的该目录中的项目。附加它们以获得与原始搜索相同程度的文件名:../art/something.dds。假设当前目录没有改变,那么如果被归结为任何原始OpenFile调用,这应该有效。但如果您确实需要完全限定的文件名,请使用该部分名称调用GetFullPathName

P.S。

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

无法运作。您正在比较地址,因此始终测试错误,与ch内容无关。