原文转自 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. PAT (Basic Level) Practice 1021 个位数统计

    个人练习 给定一个 k 位整数 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​ (0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​>0),请编写程序统计每种 ...

  2. Codeforces Round #459 (Div. 2) D. MADMAX DFS+博弈

    D. MADMAX time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  3. Matplotlib库介绍

    pyplot的plot()函数 pyplot的中文显示 pyplot的文本显示 pyplot的子绘图区域

  4. 13 Django组件-cookie与session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  5. Java线程和多线程(八)——Thread Dump

    Java的Thread Dump就是列出JVM中所有激活状态的线程. Java Thread Dump Java Thread Dump在分析应用性能瓶颈和死锁的时候,是非常有效的. 下面将介绍多种不 ...

  6. CodeForces 879D Teams Formation

    题意 将一个长度为\(n\)的数组重复\(m\)遍得到一个长度为\(n \times m\)的新序列,然后消掉新序列中连续\(k\)个相同的元素,不断重复这一过程,求最后剩下的序列的长度 分析 首先可 ...

  7. hive原理

    什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. Hive架构图 Jobtracker是hadoop1.x中的组件,它的 ...

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

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

  9. nginx配置及HTTPS配置示例

    一.nginx简单配置示例 user www www; worker_processes ; #error_log logs/error.log; #error_log logs/error.log ...

  10. 自动化测试(三)如何用python写个双色球

    写一个程序,输入N就产生N条双色球号码 红球  6     01-33 蓝球  1     01-16 产生的双色球号码不能重复,写到一个文件里面,每一行是一条 红球: 01 03 05 07 08  ...