使用C ++获取目录根目录

时间:2013-12-10 15:15:58

标签: c++ windows winapi directory

为了开发Windows的桌面应用程序,需要知道每个用户的几个用户目录,我想保存例如用户的文档目录。

我发现已经存在一些宏(例如CSIDL_COMMON_DOCUMENTS)来了解其目录的文件夹,但是当我打印这些信息时,我只得到一个整数并且不知道如何获取字符串

欢迎任何帮助。

非常感谢!

2 个答案:

答案 0 :(得分:4)

您可以使用SHGetFolderPath()

#include <iostream>
#include <Windows.h>
#include <Shlobj.h>

int main()
{
    char path[MAX_PATH];
    if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, 0, path)))
    {
        std::cout << path;
    }
}

CSIDL_COMMON_DOCUMENTS替换为您需要的任何CSIDL,例如CSIDL_MYDOCUMENTS。要获取其他用户的Documents文件夹,您的应用必须先模拟该用户,或以其他方式获取该用户的访问令牌,然后才能查询特定于该用户的任何CSIDL值。

答案 1 :(得分:-2)

使用WinAPI,CSIDL_COMMON_DOCUMENTS是:

  1. 已过时
  2. 不是正确的文件夹(它是常用文档而不是特定的用户文档文件夹)。
  3. MSFT建议使用KNOWNFOLDERID代替CSIDL_COMMON_DOCUMENTS,但在Windows Vista之前不支持它。

    如果您正在构建Windows应用程序,请考虑使用C ++ / CLI和.NET库,这使得“windowsy”之类的东西非常直接。

    using namespace System;
    int main()
    {
       Console::WriteLine();
       Console::WriteLine( "GetFolderPath: {0}", Environment::GetFolderPath( Environment::SpecialFolder::MyDocuments) );
    }
    

    MSDN Documentation on Environment::SpecialFolder