1. 程式人生 > >獲取"我的文件“路徑

獲取"我的文件“路徑

方法一:來自網路;

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中除錯通過。


相關推薦

no