如何得到程序的运行目录

SnakeYangNan 2005-01-21 10:10:45
我最近在写一程序,要求运行时得到自身的目录以便以后的操作
当然是动态的,我肯定不能保证我的程序在任何的机器上目录一样啊
我现在没什么好办法,希望强人指点一下啊
...全文
326 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xy2001 2005-07-18
  • 打赏
  • 举报
回复
mark
YFY 2005-01-21
  • 打赏
  • 举报
回复

在 strcat(szCurPath,"\\MsgTransfer.evt"); 之前获取到的就是.
YFY 2005-01-21
  • 打赏
  • 举报
回复
给你一段我写的代码,其中有,szCurPath存放的就是路径:

int WriteToLog(int iErrorNumber,TCHAR *szMsg)
{
int i = 0;
int iLastSperate = 0;
TCHAR szCurPath[272];
HANDLE hWndFile;
WIN32_FIND_DATA fileFind;
FILE *fp;
SYSTEMTIME lpSystemTime;

GetModuleFileName(GetModuleHandle(NULL),szCurPath,256);

for (i=0; i<256; i++)
{
if (szCurPath[i] == '\\')
{
iLastSperate = i;
}
else if(szCurPath[i] == '\0')
{
break;
}
}

if (iLastSperate > 0 && i < 256)
{
szCurPath[iLastSperate] = '\0';
}
else
{
return (-1);
}

strcat(szCurPath,"\\MsgTransfer.evt");

//printf("current path: %s \n",szCurPath);

GetLocalTime(&lpSystemTime);

printf("current time: %04d-%02d-%02d %02d:%02d:%02d:%03d\n",
lpSystemTime.wYear,lpSystemTime.wMonth,lpSystemTime.wDay,
lpSystemTime.wHour,lpSystemTime.wMinute,lpSystemTime.wSecond,
lpSystemTime.wMilliseconds);

hWndFile = FindFirstFile(szCurPath,&fileFind);
FindClose(hWndFile);


if (INVALID_HANDLE_VALUE == hWndFile)
{
if ((fp = fopen(szCurPath,"w")) == NULL)
{
return (-2);
}
fprintf(fp,"%04d-%02d-%02d %02d:%02d:%02d:%03d Event:%06d %s\n",
lpSystemTime.wYear,lpSystemTime.wMonth,lpSystemTime.wDay,
lpSystemTime.wHour,lpSystemTime.wMinute,lpSystemTime.wSecond,lpSystemTime.wMilliseconds,
iErrorNumber,szMsg);
fclose(fp);
}
else
{
if (fileFind.nFileSizeLow > 61440) // if event file size > 60K, delete, create new
{
if (DeleteFile(szCurPath))
{
if ((fp = fopen(szCurPath,"w")) == NULL)
{
return (-2);
}
fprintf(fp,"%04d-%02d-%02d %02d:%02d:%02d:%03d Event:%06d %s\n",
lpSystemTime.wYear,lpSystemTime.wMonth,lpSystemTime.wDay,
lpSystemTime.wHour,lpSystemTime.wMinute,lpSystemTime.wSecond,lpSystemTime.wMilliseconds,
iErrorNumber,szMsg);
fclose(fp);
}
}
else
{
if ((fp = fopen(szCurPath,"a+")) == NULL)
{
return (-3);
}
else
{
fprintf(fp,"%04d-%02d-%02d %02d:%02d:%02d:%03d Event:%06d %s\n",
lpSystemTime.wYear,lpSystemTime.wMonth,lpSystemTime.wDay,
lpSystemTime.wHour,lpSystemTime.wMinute,lpSystemTime.wSecond,lpSystemTime.wMilliseconds,
iErrorNumber,szMsg);
fclose(fp);
}
}
}

/***********************************************
if (SetCurrentDirectory(szCurPath) != 0)
{
printf("set current path ok...\n");
}
else
{
printf("set current path failure!\n");
}
***********************************************/

return (1);
}
freegitago 2005-01-21
  • 打赏
  • 举报
回复
VC中可以使用GetMoudleFileName(...)
main函数的第一个参数也是当前可执行程序的目录:
int main(argv, char** argc)
{
cout<<argc[0]<<"\n";
}
CMyMfc 2005-01-21
  • 打赏
  • 举报
回复
GetModuleFileName得到的是绝对路径加程序名
自己把程序名去掉就是路径了
piaozi2003 2005-01-21
  • 打赏
  • 举报
回复
DWORD GetCurrentDirectory(
DWORD nBufferLength, // size of directory buffer
LPTSTR lpBuffer // directory buffer
);
SnakeYangNan 2005-01-21
  • 打赏
  • 举报
回复
多谢了
oyljerry 2005-01-21
  • 打赏
  • 举报
回复
GetModuleFileName获得全路径

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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