如何获取我的EXE文件所在的目录?
我编了一个程序,希望程序在启动时自动获取一些配置数据,于是我打算在我开发的EXE文件所在目录下创建几个配置文件,但是我该如何在程序中获取EXE文件的路径呢?
[解决办法]
WINAPI DWORD GetModuleFileName(
HMODULE hModule,
LPWSTR lpFilename,
DWORD nSize);
这个取得 本程序 路径+名称的
[解决办法]
char FilePath[MAX_PATH+1]= {0};
char *p = NULL;
GetModuleFileName(NULL, FilePath, sizeof(FilePath)); //获取程序当前执行文件名
p=strrchr(FilePath, '\\');
*p='\0';
FilePath里是路径
[解决办法]
GetCurrentDiretory()是不准确的,GetModuleFileNam()获取到全路径,然后用_tsplitpath_s()函数分离即可.
TCHAR FilePath[256] = {0}; TCHAR Drive[4], Dir[128], FileName[32], Ext[8]; GetModuleFileName(NULL, FilePath, _countof(FilePath)); _tsplitpath_s(FilePath, Drive, _countof(Drive), Dir, _countof(Dir), FileName, _countof(FileName), Ext, _countof(Ext)); _stprintf_s(FilePath, _countof(FilePath), TEXT("%s%s"), Drive, Dir);
[解决办法]
很少有人知道,其实 GetCurrentDirectory 是不行的.
很多时候用 GetCurrentDirectory 可以,是程序刚开始的时候才可以.
这个 GetCurrentDirectory 的意思,不是取当前应用程序所在目录.
这个 Current 在这里,是最近,最后一次的意思.
当我们用一个CFileDialog随便保存一个文件到桌面,再执行GetCurrentDirectory
得到的目录就是桌面,而非应用程序所在目录了.
本来保存文件不写绝对路径名是会存在应用程序的当前目录的.
但如果这个时候我们保存文件不写绝对路径名,就会存在桌面而不是存在当前目录.
因为他找的是最近使用的目录,而非应用程序所在目录.
只有GetModuleFileName才是可以的.
[解决办法]
给你一个现成的函数吧!
CString GetExePath(){ char pathbuf[260]; int pathlen = ::GetModuleFileName(NULL,pathbuf,260); // 替换掉单杠 while(TRUE) { if(pathbuf[pathlen--]=='\\') break; } pathbuf[++pathlen]= 0x0; CString fname = pathbuf; return fname;}
[解决办法]
ExePath.cpp
#include <afx.h>#include <iostream.h>CString GetExePath(){ char pathbuf[260]; int pathlen = ::GetModuleFileName(NULL,pathbuf,260); // 替换掉单杠 while(TRUE) { if(pathbuf[pathlen--]=='\\') break; } pathbuf[++pathlen]= 0x0; CString fname = pathbuf; return fname;}void main(){ cout<<GetExePath()<<endl;}