GetCurrentDirectory 为什么获取的目录不对呢?

aCracker 2010-06-14 02:07:20
下面是一个按钮事件里面的,我贴出来了,可能很多人看过的。

	char DatPath[256] = {0};
GetCurrentDirectory( sizeof(DatPath) , DatPath );
strcat( DatPath , "\\Server.dat");
//程序编译后第一次点击按钮,DatPath 路径正确。而第二次则是CFileDialog dlg 保存的路径。
HANDLE h_DatFile= CreateFile(DatPath , GENERIC_WRITE|GENERIC_READ , FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL );
if (h_DatFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox("DAT未找到");
AfxMessageBox(DatPath);
CloseHandle(h_DatFile);
return;
}
// return;
// AfxMessageBox(DatPath);
CFileDialog dlg(FALSE, "exe", "setup.exe", OFN_OVERWRITEPROMPT,"可执行文件|*.exe", NULL);
if(dlg.DoModal () != IDOK)
return;
这个是怎么回事呢?
我的目的是,我现在运行A.EXE,找到和A.EXE同一目录的B.DAT,然后改写BAT的一些数据,保存为C.EXE。
改写 上面的代码没有这功能。

...全文
817 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwyyxx26 2011-08-03
  • 打赏
  • 举报
回复
恩~~~~~~~~
jingzhongrong 2010-06-14
  • 打赏
  • 举报
回复
GetCurrentDirectory得到的目录是当前目录,不一定是程序目录,要获取程序所在目录,用GetModuleFileName
m_nAdrs 2010-06-14
  • 打赏
  • 举报
回复
学习了.....
schlafenhamster 2010-06-14
  • 打赏
  • 举报
回复
3楼说了原因,2个办法:
1》fd.m_ofn.Flags|=OFN_NOCHANGEDIR;//keep same dir
2》if(strlen(m_KeptPath)==0) fd.m_ofn.lpstrInitialDir="D:\\";
else fd.m_ofn.lpstrInitialDir=m_KeptPath;

zwfgdlc 2010-06-14
  • 打赏
  • 举报
回复

#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

TCHAR szFileName;
GetModuleFileName(NULL, szFileNames, sizeof(szFileNames));
PathRemoveFileSpec(szFileName);
wolffan3150 2010-06-14
  • 打赏
  • 举报
回复
GetModuleFileName:

CString strName;
DWORD dwLen = GetModuleFileName(NULL, szFileNames, sizeof(szFileNames));
for(DWORD offset=dwLen; offset>=0; offset--)
{
if(szFileNames[offset] == '\\')
{
szFileNames[offset] = 0;
break;
}
}
strName = szFileNames;
lumingyuan123 2010-06-14
  • 打赏
  • 举报
回复
CFileDialog dlg(FALSE, "exe", "setup.exe", OFN_OVERWRITEPROMPT,"可执行文件|*.exe", NULL);
当用户在选择了一个目录后,当前目录就改变了,所以第二次按下按钮时,GetCurrentDirectory( sizeof(DatPath) , DatPath );得到的路径是用户选择的文件所在的路径。
你可以单步调试看看每次按下按钮后datpath的值
解决方法:程序第一次启动时就通过getcurrentDirectory将当前目录赋给一个全局变量(是一个绝对路径),然后当你要打开某个文件是通过字符串组合来获取你要打开的文件位置。(“../”向上一层)。
这个问题我以前也遇到过。
wolffan3150 2010-06-14
  • 打赏
  • 举报
回复
GetCurrentDirectory()得到的当前目录并不一定是你启动的EXE所在的目录,
有一个GetAppModleDirectory之类的函数是你要的功能
zwfgdlc 2010-06-14
  • 打赏
  • 举报
回复
GetCurrentDirectory()得到的当前目录并不一定是你启动的EXE所在的目录,
概念不要搞混了。
具体看桌面的快捷方式属性。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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