C获取程序自身路径的超级简单的办法
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】Win32
GetModuleFileName 程序所在真实路径,含文件名(如 "D:\myapp\test.exe")
[
16 瀏覽
0 評論
5 贊
5 踩
]
概要
超级简单,得到 程序全路径 或 目录路径 或 纯程序文件名
正文
先说一句
得到程序目录,有一种方法更加保险,因为文件选择器有可能会更改程序的工作目录,使其得到的路径不是真实路径(原因见:http://huidong.xyz/index.php?mode=2&id=173 ),所以可以参考:http://www.huidong.xyz/index.php?mode=2&id=214 的方法。这个方法可以确保你得到的目录确确实实是程序的真实目录
GetModuleFileName 程序所在真实路径,含文件名(如 "D:\myapp\test.exe")
wchar_t strProgramFile[1024]; GetModuleFileName(NULL, strProgramFile, 1024); //调用win api 获得程序全路径
函数得到的路径字符串类型是char还是wchar_t取决于项目字符集
去除程序文件名,只要目录路径的示例:
TCHAR bufAppName[1024] = { 0 }, szCmd[1024] = { 0 }; GetModuleFileName(NULL, bufAppName, 1023); wstring wstrAppName = bufAppName; wstring wstrAppDir = wstrAppName.substr(0, wstrAppName.rfind(L'\\')); wstring wstrCmd = wstrAppDir + _T("\\wordpad.exe ") + lpCmdLine; lstrcpy(szCmd, wstrCmd.c_str());
_getcwd 目录路径(不含xxx.exe,比如 "D:\myapp")
** 注意:该函数没有太研究,好像得到的还是当前工作路径。
使用_getcwd函数,可以得到程序的文件目录(不含xxx.exe),需要包含此头文件:
#include <direct.h>
不同的编译器需要的头文件不一样,上面那个是VS需要的,其它的可以查百科
使用示例:
// 得到char型路径 char path[1024] = { 0 }; _getcwd(path, 1024);
如果要wchar_t类型的路径,无需转换字符串类型,直接使用 _wgetcwd 函数 即可。
程序文件名(比如 "test.exe")
首先获取全路径的字符串,再从中得到它的文件名。
请使用http://huidong.xyz/index.php?mode=2&id=205 中的GetFileName
函数得到全路径对应的文件名。
GetFileName函数
char *GetFileName(char *p) //得到一个路径的纯文件名 { int x = strlen(p); char ch = '\\'; char *q = strrchr(p,ch); return q + 1; }
比如:
#include <windows.h> #include <stdio.h> char *GetFileName(char *p) //得到一个路径的纯文件名 { int x = strlen(p); char ch = '\\'; char *q = strrchr(p,ch); return q + 1; } int main() { char* strProgramFile = new char[1024]; GetModuleFileName(NULL, strProgramFile, 1024); //调用win api 获得程序全路径 strProgramFile = GetFileName(strProgramFile); printf(strProgramFile); while(1); return 0; }
示例代码中的输出即是程序文件名。