【问题标题】:How To Get System Folder Path(C:\Windows C:\Program Files) in Windows using C++?如何使用 C++ 在 Windows 中获取系统文件夹路径(C:\Windows C:\Program Files)?
【发布时间】:2011-01-30 04:23:54
【问题描述】:

我正在用 C++ MFC 编程,

我想获取“C:\windows”“c:\program files”文件夹路径。

有时用户可能会在其他文件夹中设置窗口,例如 c:\windows0。

是否有任何 API 来获取窗口的绝对路径和程序文件路径?

非常感谢!

【问题讨论】:

    标签: c++ windows api mfc


    【解决方案1】:

    使用 Win32 API>

    对于 Windows 文件夹:

    TCHAR windir[MAX_PATH];
    GetWindowsDirectory(windir, MAX_PATH);
    

    对于程序文件:

    TCHAR pf[MAX_PATH];
    SHGetSpecialFolderPath(
        0,
        pf, 
        CSIDL_PROGRAM_FILES, 
        FALSE ); 
    

    MAX_PATH 来自 Windows 标头,将保证缓冲区足够长以容纳最长(非 UNC)路径。

    另外,请注意 SHGetSpecialFolderPath 可用于检索其他“特殊”文件夹,包括 Windows 文件夹,只需将第三个参数替换为此 list 中的任何一个。

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      在 Vista+ 上,SHGetKnownFolderPathSHGetFolderPathSHGetSpecialFolderPath 的替代品,但如果您需要向后兼容旧版本的 Windows,您可以继续使用旧功能。

      【讨论】:

        【解决方案4】:

        调用getenv("%ProgramFiles%") 和getenv("%WinDir%")

        【讨论】:

        • 我不会依赖环境变量。
        • 永远不要相信环境变量。因为它们可供用户访问。他可能会改变它。
        【解决方案5】:

        其中大部分来自 SHGetFolderPath,但 GetSystemDirectory() 返回 C:\Windows\System32 的绝对位置。不要使用 GetWindowsDirectory()。它不再做你想做的事了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-10
          • 1970-01-01
          • 2014-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多