获取我的文档“路径
From:?http://blog.csdn.net/chinabinlang/article/details/8637362
方法一:來自網絡;
CString getMyDoc() // 獲取“我的文檔”路徑 {TCHAR m_lpszDefaultDir[MAX_PATH] = {0};TCHAR szDocument[MAX_PATH] = {0};memset(m_lpszDefaultDir, 0, _MAX_PATH);LPITEMIDLIST pidl = NULL;SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl);if (pidl && SHGetPathFromIDList(pidl, szDocument)){GetShortPathName(szDocument, m_lpszDefaultDir, _MAX_PATH);}return CString(szDocument); }
方法二:
函數SHGetSpecialFolderLocation():
?
#include "shlobj.h" //包含頭文件
WINSHELLAPI HRESULT WINAPI?SHGetSpecialFolderLocation?(HWND hwndOwner, int nFolder,LPITEMIDLIST * ppidl); //函數聲明
hwndOwner:?指定了"所有者窗口",在調用這個函數是可能出現的對話框或信息框.
nFolder:?是一個整數id,決定哪個目錄是待查找目錄,它的取值可能是
CSIDL_BITBUCKET??????????????????? 回收站
CSIDL_CONTROLS??????????????????? 控制面板
CSIDL_DESKTOP??????????????????????Windows桌面desktop;
CSIDL_DESKTOPDIRECTORY?? desktop的目錄;
CSIDL_DRIVES??????????????????????????? 我的電腦
CSIDL_FONTS???????????????????????????? 字體目錄
CSIDL_NETHOOD?????????????????????? 網上鄰居
CSIDL_NETWORK?????????????????????? 網上鄰居virtual folder
CSIDL_PERSONAL????????????????????? 我的文檔
CSIDL_PRINTERS??????????????????????? 打印機
CSIDL_PROGRAMS??????????????????? 程序組
CSIDL_RECENT????????????????????????? 最近打開文檔
CSIDL_SENDTO????????????????????????? 發送到菜單項
CSIDL_STARTMENU??????????????????? 快啟菜單
CSIDL_STARTUP???????????????????????? 啟動目錄
CSIDL_TEMPLATES???????????????????? 臨時文檔
ppidl: pidl地址. SHGetSpecialFolderLocation把地址寫到pidl.
示例代碼VC++ 6.0測試通過):
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
char szDir[200];
if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
{
if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl))) {
// 如果成功返回true
SHGetPathFromIDList(pidl, szDir);
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
::MessageBox (NULL,szDir,"Path",MB_OK);
VC獲取指定文件夾路徑
?
flyfish? 2010-3-5
?
一 使用Shell函數
1 獲取應用程序的安裝路徑
?
TCHAR buf[_MAX_PATH];
SHGetSpecialFolderPath(NULL,buf,CSIDL_PROGRAM_FILES,NULL);
AfxMessageBox(buf);
2 獲取應用程序數據路徑的文件夾
?TCHAR bufApplicateData[_MAX_PATH];
SHGetSpecialFolderPath(NULL,bufApplicateData,CSIDL_APPDATA,NULL);
AfxMessageBox(bufApplicateData);
?
3 獲取系統文件夾
?TCHAR buf[_MAX_PATH];
SHGetSpecialFolderPath(NULL,buf,CSIDL_SYSTEM,NULL);
AfxMessageBox(buf);
?
4 獲取Windows目錄
?TCHAR buf[_MAX_PATH];
SHGetSpecialFolderPath(NULL,buf,CSIDL_WINDOWS,NULL);
AfxMessageBox(buf);
?
5 獲取其他指定文件夾
?主要使用SHGetSpecialFolderPath函數
函數原型:BOOL SHGetSpecialFolderPath(HWND hwndOwner,LPTSTR lpszPath,int nFolder, BOOL fCreate);
參數nFolder指明獲取什么樣的文件夾。如下參考
MSDN可以搜索關鍵字:CSIDL
MSDN URL:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/enums/csidl.htm
二 使用其他API函數
?1 獲取系統文件夾
TCHAR? buf[_MAX_PATH];
GetSystemDirectory( buf, _MAX_PATH );
AfxMessageBox(buf);
?
2 獲取Windows目錄
TCHAR? buf[_MAX_PATH];
GetWindowsDirectory( buf, _MAX_PATH );
AfxMessageBox(buf);
?
以上程序在VC2005中調試通過。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
- 上一篇: C-Free简单介绍
- 下一篇: Swift - 自定义单元格实现微信聊天