原文转自 https://blog.csdn.net/morewindows/article/details/8683519

调整进程当前目录为程序可执行文件所在目录是个非常实用的方法。为了更加的让代码复用,本文将调整进程当前目录为程序可执行文件所在目录这一功能封装为三个实用函数——

1.SplitPathFileName

这个函数将文件全名(带路径)分解成路径名,文件名,后缀名。

2.GetProcessPathNameAndFileName

得到当前进程可执行文件的路径名,文件名,后缀名。

3.AdjustProcessCurrentDirectory

调整进程当前目录为程序可执行文件所在目录

各函数使用示范可以参见如下程序:

  1. //调整进程当前目录为程序可执行文件所在目录
  2. //http://blog.csdn.net/morewindows/article/details/8683519
  3. //By MoreWindows( http://blog.csdn.net/MoreWindows )
  4. #include <windows.h>
  5. #include <stdio.h>
  6. #include <conio.h>
  7.  
  8. //将文件全名(带路径)分解成路径名,文件名,后缀名
  9. //C:\test\test.exe -> "C:\test\", "test", ".exe"
  10. //By MoreWindows( http://blog.csdn.net/MoreWindows )
  11. void SplitPathFileName(const char *pstrPathFileName, char *pstrPath, char *pstrFileName, char *pstrExtName)
  12. {
  13. if (pstrPath != NULL)
  14. {
  15. char szTemp[MAX_PATH];
  16. _splitpath(pstrPathFileName, pstrPath, szTemp, pstrFileName, pstrExtName);
  17. strcat(pstrPath, szTemp);
  18. }
  19. else
  20. {
  21. _splitpath(pstrPathFileName, NULL, NULL, pstrFileName, pstrExtName);
  22. }
  23. }
  24.  
  25. //得到当前进程可执行文件的路径名,文件名,后缀名
  26. //如运行C:\test\test.exe 得到 "C:\test\", "test", ".exe"
  27. //By MoreWindows( http://blog.csdn.net/MoreWindows )
  28. BOOL GetProcessPathNameAndFileName(char *pstrPath, char *pstrFileName, char *pstrExtName)
  29. {
  30. char szExeFilePathFileName[MAX_PATH];
  31. if (GetModuleFileName(NULL, szExeFilePathFileName, MAX_PATH) == )
  32. return FALSE;
  33.  
  34. SplitPathFileName(szExeFilePathFileName, pstrPath, pstrFileName,pstrExtName);
  35. return TRUE;
  36. }
  37.  
  38. //调整进程当前目录为程序可执行文件所在目录
  39. //By MoreWindows( http://blog.csdn.net/MoreWindows )
  40. BOOL AdjustProcessCurrentDirectory()
  41. {
  42. char szPathName[MAX_PATH];
  43. GetProcessPathNameAndFileName(szPathName, NULL, NULL);
  44. return SetCurrentDirectory(szPathName);
  45. }
  46.  
  47. int main()
  48. {
  49. printf(" 调整进程当前目录为程序可执行文件所在目录 \n");
  50. printf(" - http://blog.csdn.net/morewindows/article/details/8683519 -\n");
  51. printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");
  52.  
  53. char szCurrentDirectory[MAX_PATH];
  54. GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
  55. printf("进程当前目录为: \n%s\n", szCurrentDirectory);
  56.  
  57. AdjustProcessCurrentDirectory();
  58.  
  59. GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
  60. printf("\n调整后,进程当前目录为: \n%s\n", szCurrentDirectory);
  61. getch();
  62. return ;
  63. }

通过CMD来调用这个程序看看。

由图可以看出,程序的当前目录已经被调整到程序可执行文件所在目录了。

附1:得到程序所在目录还可以使用PathRemoveFileSpec函数。20130507

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5165721

欢迎关注微博:http://weibo.com/MoreWindows

MFC 将 '当前工作路径' 改为 'exe所在路径'(转)的更多相关文章

  1. exe所在路径

    procedure TForm1.btn1Click(Sender: TObject); begin //完整路径 E:\UsrSoft\Desktop\FileNameDemo\Project1.e ...

  2. Qt5_当前exe所在路径

    可以通过以下方式来获取: 1. #include <QDir>#include <QDebug> QDir dir; qDebug() << "curre ...

  3. C# 获取当前执行DLL 所在路径

    有的时候,当前执行的DLL 和启动的EXE 所在路径并不一致,这时我们想要获得当前执行DLL 所在路径可以使用下面的方法. // Summary: // Gets the path or UNC lo ...

  4. Visual Studio 2017 调试器的工作进程(msvsmon.exe)意外退出 调试将终止

    开发环境: Windows 10 in Parallels Desktop Visual Studio 15.6 场景还原: 使用 Visual Studio 15.6 (即 Visual Studi ...

  5. 关于富文本编辑器—UEditor(java版)的使用,以及如何将UEditor的文件/图片上传路径改成绝对路径

    突然发现好久没写博客了,感觉变懒了,是要让自己养成经常写文章的习惯才行.既可以分享自己的所学,和所想,和大家一起讨论,发现自己的不足的问题. 大家可能经常会用到富文本编辑器,今天我要说的是UEdito ...

  6. 织梦dedecms5.7二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法

    dedecms升级到5.7SP1后,开启二级域名,你会发现,在二级域名下的文章,上传的图片地址都是:二级域名+图片地址,这是相对路径.但是你的图片是默认上传在uploads里面的.应该使用绝对路径.这 ...

  7. 中文Ubuntu里用户目录里的路径改成英文

    (附注:转载于http://www.linuxdiyf.com/linux/201105/56.html) 为了使用起来方便,装了Ubuntu中文版,自然在home文件里用户目录的"桌面&q ...

  8. 得到本地应用程序的EXE的路径

    实现效果: 知识运用: Application类的ExecutablePath属性 //获取启动了应用程序的可执行文件的路径和可执行文件的名称    public static string Exec ...

  9. dedecms5.7二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法

    dedecms5.7(织梦CMS5.7)二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法 dedecms升级到5.7SP1后,开启二级域名,你会发现,在二级域名下的文章,上传的图片地址都是: ...

随机推荐

  1. Windows手工创建服务方法

    需要将程序设置成Windows服务的情况,可以利用一下windows自带的sc命令来创建服务. 该命令的基本用法如下:打开cmd命令, 输入如下信息:1 创建服务:sc create SecServe ...

  2. PAT (Basic Level) Practice 1023 组个最小数

    个人练习 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...

  3. 浅谈XX系统跨平台迁移(测试环境)

    一 概述 XX系统目前运行在XX-A的云平台上,计划将其迁移至XX-B的云平台. XX系统是java开发,中间组件涉及nginx+keepalived实现各个业务系统之间的高可用,kafka,zook ...

  4. 笔记-python-statement-with

    笔记-python-statement-with 1.      with语句 1.1.    基础使用案例 在开发时,经常使用with语句来打开文件: with open(‘a.txt’,’a+’, ...

  5. storm实时计算实例(socket实时接入)

    介绍 实现了一个简单的从实时日志文件监听,写入socket服务器,再接入Storm计算的一个流程. 源码 日志监听实时写入socket服务器   package socket; import java ...

  6. 通过Aspose.Word和ZXING生成复杂的WORD表格

    1.前言 这是我之前做的一个项目中要求的功能模块,它的需求是生成一个WORD文档,需要每页一个表格并且表格中需要插入文字.条形码和二维码等信息,页数可控制.具体的效果如下图所示: 可以看到有以下几点是 ...

  7. 3226: [Sdoi2008]校门外的区间

    链接 思路 bug漫天飞... 维护一颗线段树,支持区间赋值,和区间异或.因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下. U ...

  8. 大数据服务大比拼:AWS VS. AzureVS.谷歌

    [TechTarget中国原创] 对于企业用户来说,大数据服务是一项较具吸引力的云服务.三大巨头AWS.Azure以及谷歌都在力争夺得头把交椅,但是最后到底是哪一家能够取得王座之战的胜利呢? 云市场正 ...

  9. 树莓派网线连接后通过ssh远程连接

    新安装的树莓派默认是不支持ssh远程连接的,通过PuTTY (64-bit)会提示连接被拒绝. 本文支持笔记本或pc直接通过网线连接树莓派,具体操作步骤如下: 一.确定树莓派的ip地址及是否开启ssh ...

  10. jeakins用户配置

    进入jeakins:系统管理-全局安全设置 如果有多个用户视情况而定进行权限配置