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

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

1.SplitPathFileName

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

2.GetProcessPathNameAndFileName

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

3.AdjustProcessCurrentDirectory

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

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

//调整进程当前目录为程序可执行文件所在目录
//http://blog.csdn.net/morewindows/article/details/8683519
//By MoreWindows( http://blog.csdn.net/MoreWindows )
#include <windows.h>
#include <stdio.h>
#include <conio.h> //将文件全名(带路径)分解成路径名,文件名,后缀名
//C:\test\test.exe -> "C:\test\", "test", ".exe"
//By MoreWindows( http://blog.csdn.net/MoreWindows )
void SplitPathFileName(const char *pstrPathFileName, char *pstrPath, char *pstrFileName, char *pstrExtName)
{
if (pstrPath != NULL)
{
char szTemp[MAX_PATH];
_splitpath(pstrPathFileName, pstrPath, szTemp, pstrFileName, pstrExtName);
strcat(pstrPath, szTemp);
}
else
{
_splitpath(pstrPathFileName, NULL, NULL, pstrFileName, pstrExtName);
}
} //得到当前进程可执行文件的路径名,文件名,后缀名
//如运行C:\test\test.exe 得到 "C:\test\", "test", ".exe"
//By MoreWindows( http://blog.csdn.net/MoreWindows )
BOOL GetProcessPathNameAndFileName(char *pstrPath, char *pstrFileName, char *pstrExtName)
{
char szExeFilePathFileName[MAX_PATH];
if (GetModuleFileName(NULL, szExeFilePathFileName, MAX_PATH) == )
return FALSE; SplitPathFileName(szExeFilePathFileName, pstrPath, pstrFileName,pstrExtName);
return TRUE;
} //调整进程当前目录为程序可执行文件所在目录
//By MoreWindows( http://blog.csdn.net/MoreWindows )
BOOL AdjustProcessCurrentDirectory()
{
char szPathName[MAX_PATH];
GetProcessPathNameAndFileName(szPathName, NULL, NULL);
return SetCurrentDirectory(szPathName);
} int main()
{
printf(" 调整进程当前目录为程序可执行文件所在目录 \n");
printf(" - http://blog.csdn.net/morewindows/article/details/8683519 -\n");
printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); char szCurrentDirectory[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
printf("进程当前目录为: \n%s\n", szCurrentDirectory); AdjustProcessCurrentDirectory(); GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
printf("\n调整后,进程当前目录为: \n%s\n", szCurrentDirectory);
getch();
return ;
}

通过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. 笔记-python-statement-with

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

  2. Android开发——弹性滑动的两种实现方式

    0. 前言   欢迎转载,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52538723 我们在Android开发--View滑动的三 ...

  3. CodeForces 805F Expected diameter of a tree 期望

    题意: 给出一个森林,有若干询问\(u, v\): 从\(u, v\)中所在子树中随机各选一个点连起来,构成一棵新树,求新树直径的期望. 分析: 回顾一下和树的直径有关的东西: 求树的直径 从树的任意 ...

  4. android gradle.properties

    gradle.properties 里面配置的东西,在gradle 文件里面可以直接引用. 例如: 在你工程根目录的gradle.properties 文件里面 可以这样配置: ## Project- ...

  5. Redis常用知识

    1.redis是什么 redis是一种支持Key-Value等多种数据结构的存储系统.可用于缓存.事件发布或订阅.高速队列等场景.该数据库使用ANSI C语言编写,支持网络,提供字符串.哈希.列表.队 ...

  6. TO_CHAR 和 TO_DATE的一些用法总结

    对于初学者来说,日期处理那快一向是问题的集中地.今天刚刚看了个案例,将的就是ORACLE日期处理中的错误,其关键原因,就是TO_CHAR 和TO_DATE的用法不清晰,,事实上,这两个东西也特别容易混 ...

  7. ClassNotFoundException: http.nio.NHttpClientEventHandle

    解决方案是打开maven仓库中的jar包看看报错的类所对应版本的类存在不存在,若不存在就换个版本的jar包

  8. LDA和PCA降维的原理和区别

     LDA算法的主要优点有: 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识. LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优. LDA算 ...

  9. springboot09 事务 H2数据库

    一.事务 1. 事务介绍 事务可以包含多个操作步骤 , 如果有一个步骤失败,那么这一组都以失败告终. 事务是指包含多个微小逻辑单元的一组操作, 只要其中有一个逻辑失败了,那么这一组操作就全部以失败告终 ...

  10. PAT 1070 结绳

    https://pintia.cn/problem-sets/994805260223102976/problems/994805264706813952 给定一段一段的绳子,你需要把它们串成一条绳. ...