使用vc ++获取文件夹名称

时间:2015-10-21 08:59:43

标签: winapi visual-c++

我正在尝试获取目录C:\ Users \ guest \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles中的所有文件夹名称。堆栈溢出时有很多可用的链接。我尝试了这些链接,并在链接上给出了建议 以下是我的代码。

$key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet     Settings\Connections'
$data = (Get-ItemProperty -Path $key -Name  DefaultConnectionSettings).DefaultConnectionSettings

if($data[8] -eq 11)
{
$data[8] = 3
Set-ItemProperty -Path $key -Name DefaultConnectionSettings -Value $data
}
elseif ($data[8] -eq 3){
$data[8] = 11
Set-ItemProperty -Path $key -Name DefaultConnectionSettings -Value $data
}

fd.dwFileAttributes返回值0.并且代码无法找到文件夹名称。 我无法弄清楚我错过了什么导致了这个问题。 谢谢。

1 个答案:

答案 0 :(得分:0)

您没有进行任何错误处理,并且您将错误的路径传递给ShellExecute()

尝试更像这样的东西:

#include <shlobj.h>
#include <shlwapi.h>

void GetAppDirectory()
{
    WCHAR buffer[MAX_PATH] = {0};

    if (!SHGetSpecialFolderPathW( NULL
                                , buffer
                                , CSIDL_APPDATA
                                , FALSE ))
        return;

    if (!PathAppend(buffer, L"Mozilla\\Firefox\\Profiles"))
        return;

    std::wcout << buffer << std::endl;
    GetSubFolder(buffer);
}

void GetSubFolder(LPCWSTR wstrFolder)
{
    WIN32_FIND_DATA fd = {0};
    TCHAR buffer[MAX_PATH] = {0};

    if (!PathCombine(buffer, wstrFolder, L"*"))
        return;

    HANDLE hFind = FindFirstFileEx(buffer, FindExInfoStandard, &fd, FindExSearchLimitToDirectories, NULL, 0);
    if (hFind == NULL)
        return;

    do
    {
        if ((lstrcmpW(fd.cFileName, L".") == 0) || (lstrcmpW(fd.cFileName, L"..") == 0))
            continue;

        std::wcout << fd.cFileName << std::endl;

        if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (PathCombine(buffer, wstrFolder, fd.cFileName))
                ShellExecute(NULL, L"explore", buffer, NULL, NULL, SW_SHOWDEFAULT);
        }
    }
    while (FindNextFile(hFind, &fd));

    FindClose(hFind);
}