【问题标题】:Is there any reliable API to Get Windows Folder in Windows?是否有任何可靠的 API 可以在 Windows 中获取 Windows 文件夹?
【发布时间】:2010-07-01 08:28:46
【问题描述】:

是否有任何可靠的 API 可以用 C++ 在 Windows 中获取 Windows 文件夹? 我正在使用以下方式,但是失败了。

    BOOL CQUserInfoHelper::GetWindowsPath(CString& strWindowsPath)
    {
        TCHAR windowsPathTemp[MAX_PATH];
        int nSize = MAX_PATH;
        ::GetWindowsDirectory(
            windowsPathTemp,
            nSize);
        strWindowsPath = windowsPathTemp;
        return TRUE;
    }

【问题讨论】:

  • “它失败了”不是我喜欢阅读的错误描述。
  • 它不返回 XX:\\Windows,而是返回别的东西。这是我的用户报告的,我无法在他们的电脑上调试它
  • 有两个原因:如果长度大于缓冲区的大小,则返回值是保存路径所需的缓冲区大小。如果函数失败,则返回值为零。要获取扩展错误信息,请调用 GetLastError。处理这些问题
  • 您还应该始终将字符串缓冲区初始化为 0,例如TCHAR windowsPathTemp[MAX_PATH] = {0}
  • @humbagumba:为什么? GetWindowsDirectory() 将其用作[out] 参数。 Microsoft 的内部 API 检查工具保证永远不会读取 [out] 参数。如果它没有被读取,它的内容就无关紧要了。

标签: c++ windows api directory


【解决方案1】:

试试这个 -

const DWORD dwBufferLength = 65537;
CStringW strBuffer;

if (!::GetCurrentDirectory(   dwBufferLength , 
                              strBuffer.GetBuffer(dwBufferLength))    ) 
   return L"";

...

strBuffer.ReleaseBuffer();

【讨论】:

    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多