获取Windows系统文件夹,如我的文档,临时文件夹,桌面,System32文件夹,Windows目录,Program Files应用程序目录等,系统提供了相应的API。
下面是一个简单的示例:
首先需要include:
#include <Shlobj.h>
void GetSystemDir()
{
wchar_t buffer[MAX_PATH+1] = {0};
wcout.imbue(locale("chs"));
GetModuleFileName(NULL, buffer, MAX_PATH);
wcout << L"当前exe路径: " << buffer << endl;
GetCurrentDirectory(MAX_PATH, buffer);
wcout << L"当前路径: " << buffer << endl;
GetSystemDirectory(buffer, MAX_PATH);
wcout << L"System: " << buffer << endl;
GetTempPath(MAX_PATH, buffer); // 末尾带'\'
wcout << L"Temp: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_LOCAL_APPDATA, FALSE);
wcout << L"Local APPDATA: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_DESKTOP, FALSE); // 桌面文件夹
wcout << L"桌面: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_DESKTOPDIRECTORY, FALSE);
wcout << L"桌面: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_MYDOCUMENTS/*CSIDL_PERSONAL*/, FALSE);
wcout << L"我的文档: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_PROGRAM_FILES, FALSE);
wcout << L"应用程序目录: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_PROGRAMS, FALSE); // 开始菜单 Prgrams
wcout << L"开始程序目录: " << buffer << endl;
SHGetSpecialFolderPath(GetDesktopWindow(), buffer, CSIDL_WINDOWS, FALSE);
wcout << L"Windows目录: " << buffer << endl;
}
这是我的结果: