從Visual C++中,如何獲取當前用戶的「我的文檔」文件夾的路徑?獲取「我的文檔」的路徑
編輯:
我有這樣的:
TCHAR my_documents[MAX_PATH];
HRESULT result = SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, my_documents);
然而,result
是回來與E_INVALIDARG
值。任何想法,爲什麼這可能是?
從Visual C++中,如何獲取當前用戶的「我的文檔」文件夾的路徑?獲取「我的文檔」的路徑
編輯:
我有這樣的:
TCHAR my_documents[MAX_PATH];
HRESULT result = SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, my_documents);
然而,result
是回來與E_INVALIDARG
值。任何想法,爲什麼這可能是?
這取決於您需要與系統兼容多久。對於舊系統,有SHGetSpecialFolderPath。對於較新的系統,有SHGetFolderPath。從Vista開始,有SHGetKnownFolderPath。
編輯:你想用CSIDL_PERSONAL
而不是CSIDL_MYDOCUMENTS
。這樣的作品,至少在我的機器上演示代碼:
#include <windows.h>
#include <iostream>
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
int main() {
CHAR my_documents[MAX_PATH];
HRESULT result = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, my_documents);
if (result != S_OK)
std::cout << "Error: " << result << "\n";
else
std::cout << "Path: " << my_documents << "\n";
return 0;
}
使用the SHGetFolderPath
Windows API function和請求CSIDL_MYDOCUMENTS
。
注意的是,如果用戶在Win7的文檔庫更改默認保存文件夾CSIDL_PERSONAL不會返回所需的文件夾。要獲取正確的文件夾,需要使用SHLoadLibraryFromKnownFolder
獲取文檔庫的IShellLibrary
,使用IShellLibrary::GetDefaultSaveFolder
獲取庫的默認保存文件夾的IShellItem
,最後使用IShellItem::GetDisplayName
獲取文件夾名稱。
std::string GetSystemFolderPaths(int csidl)
{
wchar_t Folder[1024];
HRESULT hr = SHGetFolderPathW(0, CSIDL_MYDOCUMENTS, 0, 0, Folder);
if (SUCCEEDED(hr))
{
char str[1024];
wcstombs(str, Folder, 1023);
return str;
}
else return "";
}
cout<<GetSystemFolderPaths(CSIDL_MYDOCUMENTS)<<endl;
這個解決方案怎麼樣?它爲我工作很好。
看來您沒有使用csidl參數。如果我理解的很好,可能應該把它作爲SHGetFolderPathW()而不是CSIDL_MYDOCUMENTS的第二個參數。 – BrunoLevy 2015-12-16 17:53:03
謝謝 - 我已經試過SHGetFolderPath,並且有些東西不太合適 - 你會介意看看我在編輯中的問題嗎? – Smashery 2010-03-10 06:28:49
非常感謝! – Smashery 2010-03-10 23:17:04
這似乎是一個蟒蛇內置現在。 http://stackoverflow.com/questions/6227590/finding-the-users-my-documents-path – totowtwo 2012-06-27 08:33:35