菜鸟一问,如和找到我的可执行文件的目录?????

lifeequation 2003-12-03 09:23:29
我现在做一个程序,由于客户习惯把文件保存在桌面上,但是我的应用程序需要用到自己本身所在的目录,请问怎么找到它,用GetCurruntDirectroy()在保存文件后找到的是文件的目录,而不是可执行程序的目录,请问如何找到可执行程序的目录。
...全文
108 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lukaizhi 2003-12-04
  • 打赏
  • 举报
回复
char szPath[MAX_PATH] = "";
GetCurrentDirectory(MAX_PATH,szPath);
CString filename1;
CString filename2;
filename1 = szPath;
filename1 += "\\res\\aa.txt";
filename2 = szPath;
filename2 += "\\res\\bb.txt";
AfxMessageBox(filename1);

够清楚了吧!
lifeequation 2003-12-04
  • 打赏
  • 举报
回复
明天实验一下就给分,大家要有耐心在等一下
mysasina 2003-12-04
  • 打赏
  • 举报
回复
1:获取应用程序自身完整路径文件名
方法1:
#include "stdlib.h"
void main()
{
cout << _pgmptr << endl;
}

方法2:
char szFullPath[MAX_PATH];
ZeroMemory(szFullPath,MAX_PAT);
::GetModuleFileName(NULL,szFullPath,MAX_PATH);
::MessageBox(NULL,szFullPath,"path",MB_ICONINFORMATION);

2:如何获取应用程序所在目录?
这里值得注意的是很多人都用
GetCurrentDirectory(MAX_PATH, szCurrentPath);
来获取。这个方法并不好,经常出错,比如现在我有一个程序在d:\test目录下,现在运行这个程序后用GetCurrentDirectory得到的是d:\test。接着在程序里用CFileDialog来打开一个C:\test\test.txt文件后再调用GetCurrentDirectory,那么得到的szCurrentPath就是C:\test而不是d:\test。
当初我的一个程序里就因为这个原因运行不正常,结果查错花了2天时间。

我个人推荐用如下方法来得到当前程序所在目录比较安全:

void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );
函数来分解开始提到的_pgmptr,然后再用

void _makepath( char *path, const char *drive, const char *dir, const char *fname, const char *ext );

函数来对分解后的路径进行组合。这两个函数结合起来功能强大,使用灵活,基本上所有的有关目录和路径方面的操作都可以搞定,就是麻烦了点。
详细使用方法参看MSDN,里面有很详细的SAMPLE。

Healer 2003-12-03
  • 打赏
  • 举报
回复
GetModuleFileName
luolovegui 2003-12-03
  • 打赏
  • 举报
回复
大家都说了这么多了,而且热来热火了,看来我来迟了,UP行不。
zhucde 2003-12-03
  • 打赏
  • 举报
回复
怎么得到路径啊,GetMoudleFileName 得到得是文件名啊!
---------------------------------------------------------
char name[255];
GetModuleFileName(0,name,255);
char *p=strrchr(name,92);
strcpy(p,"");
AfxMessageBox(name);//看看这里打印出来的是不是只有目录了!
bluebohe 2003-12-03
  • 打赏
  • 举报
回复
char name[255];
GetModuleFileName(0,name,255);
我也支持 zhucde(【风间苍月】)
:)
lingling0000 2003-12-03
  • 打赏
  • 举报
回复
hehe

怎么得到路径啊,GetMoudleFileName 得到得是文件名啊!
badguy2002 2003-12-03
  • 打赏
  • 举报
回复
来晚了,up一下,混点分,呵呵
greensofter 2003-12-03
  • 打赏
  • 举报
回复
可以在保存文件前用GetCurruntDirectroy(),保存完后用SetCurruntDirectroy()就回来了
zhangnanonnet 2003-12-03
  • 打赏
  • 举报
回复
GetModuleFileName
zhucde 2003-12-03
  • 打赏
  • 举报
回复
to:awnucel

这么支持我?
曾经的猎狐 2003-12-03
  • 打赏
  • 举报
回复
char name[255];
GetModuleFileName(0,name,255);
得到可执行文件的路径+全称,然后在把可执行文件名称去掉就行。
zhusz 2003-12-03
  • 打赏
  • 举报
回复
GetModuleFileName(NULL,lpPath,_MAX_PATH);

zhucde 2003-12-03
  • 打赏
  • 举报
回复
char name[255];
GetModuleFileName(0,name,255);
得到可执行文件的路径+全称,然后在把可执行文件名称去掉就行。
zhusz 2003-12-03
  • 打赏
  • 举报
回复
用GetModuleFileName函数可以得到

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧