C++ 从WIN32\u FIND\u数据获取完整路径

C++ 从WIN32\u FIND\u数据获取完整路径,c++,performance,wchar,C++,Performance,Wchar,我需要从WIN32_FIND_数据获取完整路径的帮助 我的代码: 我真的花了一整天的时间想弄明白这一点。 但是我无法获取路径(../art/*.dds)和文件名 还有,如何检查子文件夹?或者它已经做到了 当前代码: WIN32_FIND_DATA FindData; HANDLE hFind; hFind = FindFirstFile(L"../art/*.dds", &FindData ); if( hFind == INVALID_HANDLE_VALUE ) { Pr

我需要从WIN32_FIND_数据获取完整路径的帮助 我的代码:

我真的花了一整天的时间想弄明白这一点。 但是我无法获取路径(../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 );

您知道您扫描的目录,以及在该目录中找到的项目。附加它们以获得与原始搜索相同的限定文件名:
。/art/something.dds
。假设当前目录没有更改,如果将其反馈到任何基元
OpenFile
调用,则应该可以工作。但如果您确实需要一个完全限定的文件名,请使用该部分名称调用

附言


这是行不通的。您正在比较地址,因此它将始终测试为false,与
ch

的内容无关。我完全是个哑巴,厌倦了使用它,但确实需要它工作,我需要一个如何做的示例。我尝试过GetFullPathName函数,但除了路径的第一个字母外,我似乎什么都做不到。@SpecialLUANewbie非常第一个字母:听起来像是要使用Unicode(UTF-16),但将其视为ANSI(8位),因此您可以看到,例如,{64,0,65,0,}而不是
L“AB…”。
避免使用宏和Unicode#define,并写入
GetFullPathName W
(*W*)以保持清晰,并在设置不一致的情况下进行类型检查。如果传入WideChartMultiByte的结果,它将不会与不合格的GetFullPathName一起工作,因为我看到您的上下文是使用-W表单。将ch传递给GetFullPathNameA,或将原件传递给GetFullPathNameW。@特别是新手“完全愚蠢,厌倦了使用它,但真的需要它工作”我去过那里。如果在您休息一下并查看最新的代码后它仍然不起作用,请发布您当前的代码示例,我将在下次来到这里时查看它。(请将答案标记为正确)
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 );
char ch[260];
⋮
if (ch != "invalid.dds")