您的位置:首页 > 其它

VC 取得程序所在目录的方法

2009-04-29 00:51 323 查看
如果到网上搜索VC中取得程序所在目录的函数, 大家都说是GetCurrentDirectory, 函数原型为DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer); 使用简单, 直接将当前路径读到lpBuffer中, 方便快捷, 但是注意它是把当前路径读到lpBuffer中, 而未必是程序所在目录, 由于当前目录是可以通过SetCurrentDirectory修改的, 也会在弹出一个地址选择框后修改的, 所以不要寄希望于它了.

幸好我们还可以找到另一个API, 它的名字是GetModuleFileName, 函数原型为DWORD GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize), 该函数能直接找到当前应用程序的绝对路径, 唯一遗憾的是它不能直接得到目录路径, 我们需要对它进行简单处理, 得到程序所在目录, 以下简单代码即可实现.

char pLocalPath[255];

memset(pLocalPath, 0, sizeof(pLocalPath));

GetModuleFileName(AfxGetInstanceHandle(), pLocalPath, sizeof(pLocalPath));

pLocalPath[strrchr(pLocalPath, '\\') - pLocalPath] = '\0';

AfxMessageBox(pLocalPath);

以下函数是网上有人写好的, 稍微复杂点:

CString CXXXXXXApp::GetCurDir()

{

TCHAR sDrive[_MAX_DRIVE];

TCHAR sDir[_MAX_DIR];

TCHAR sFilename[_MAX_FNAME],Filename[_MAX_FNAME];

TCHAR sExt[_MAX_EXT];

GetModuleFileName(AfxGetInstanceHandle(), Filename, _MAX_PATH);

_tsplitpath(Filename, sDrive, sDir, sFilename, sExt);

CString homeDir(CString(sDrive) + CString(sDir));

int nLen = homeDir.GetLength();

if(homeDir.GetAt(nLen-1) != _T('\'))

homeDir += _T('\');

return homeDir;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: