设置当前exe执行文件为进程工作目录

设置当前exe执行文件为进程工作目录

两种办法:

1,   API

void _splitpath(
   const char *path,
   char *drive,
   char *dir,
   char *fname,
   char *ext
);

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

2, API

BOOL PathRemoveFileSpec(      
    LPTSTR pszPath
);

使用例子:

#include <windows.h>
#include <iostream>
#include <Shlwapi.h>		//PathRemoveFileSpec函数头文件
#pragma comment(lib, "shlwapi.lib")			//VS2013下需加才可以使用PathRemoveFileSpec

using namespace std;

int main()
{
	char szCurrentDirectory[MAX_PATH], szExeFilePathFileName[MAX_PATH];

	//获取当前进程工作目录
	GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
	//szCurrentDirectory == 输出 E:\Projects\1
	cout << "进程当前工作目录为: " << szCurrentDirectory <<endl;
	//szExeFilePathFileName == exe的路径是 E:\Projects\1\Debug\11.exe
	GetModuleFileName(NULL, szExeFilePathFileName, MAX_PATH);
	char drive[MAX_PATH], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH];
	//szExeFilePathFileName == exe的路径 E:\Projects\1\Debug\11.exe
	//drive == E:   盘符
	//dir == \Projects\1\Debug\  文件中间的路径
	//fname == 11   不带拓展名的文件名
	//ext == .exe   文件拓展名
	//第一种办法获得exe文件目录
	_splitpath(szExeFilePathFileName, drive, dir, fname, ext);
	//把盘符和文件中间路径组合起来E:\Projects\1\Debug\
	strcat(drive, dir);

	GetModuleFileName(NULL, szExeFilePathFileName, MAX_PATH);
	//第二种办法获得exe文件目录
	//szExeFilePathFileName == E:\Projects\1\Debug\11.exe
	PathRemoveFileSpec(szExeFilePathFileName);

	//设置进程工作目录szExeFilePathFileName == E:\Projects\1\Debug
	SetCurrentDirectory(szExeFilePathFileName);
	//获得进程工作目录
	GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
	//szCurrentDirectory == E:\Projects\1\Debug
	cout << "调整后,  进程的工作目录为: " << szCurrentDirectory << endl;
	system("pause");
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-12 17:20:52

设置当前exe执行文件为进程工作目录的相关文章

qt新进程工作目录的设置(工作目录确实是被子进程继承的,但也可以设置)

经过试验,qt启动一个新的进程时,这个进程的工作目录是继承父进程的,无论是通过start还是startDetached来启动. 其实对于linux系统,qt底层应该也是调用fork.exec之类的函数,对于fork,参看apue中文版第三版,有以下解析: 在f o r k之后处理文件描述符有两种常见的情况:(1) 父进程等待子进程完成.在这种情况下,父进程无需对其描述符做任何处理.当子进程终止后,它曾进行过读.写操作的任一共享描述符的文件位移量已做了相应更新.(2) 父.子进程各自执行不同的程序

关于如何便捷地以命令行的形式打开exe执行文件和进入文件夹

经常以命令行的形式打开exe执行文件的同学应该知道,直接双击是会闪退,正确的打开方式是这样:运行cmd.exe--"盘符:"--"cd 路径"--"执行文件.exe". 我这里提供一个便捷的方法,原理和上面的一样:打开注册表,在"HKEY_CLASSES_ROOT\*\"下面新建项名为"shell"的项,在项"shell"下新建项名为"通过cmd打开此文件"的项,在项

轻松解决U盘中病毒,文件变成.exe执行文件的问题

U盘中的文件都变成.exe可执行文件是怎么回事?告诉你,你的U盘中病毒了,那么如何清除呢?小编现在就告诉你几个简单方法,轻松就能搞定U盘中病毒问题. 方法1: (1)首先使用杀毒软件把U盘杀杀毒,除去电脑中那些.exe执行病毒 (2)用记事本新建一个文本,然后输入Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Fo

使用pyinstaller打包Python应用,生成EXE执行文件

在命令行中切换到要打包的程序所在目录,或者在程序目录打开命令行,直接输入下面的指令即可pyinstaller -F xxx.py pyinstaller -F -w -i manage.ico app.py -F:打包为单文件-w:Windows程序,不显示命令行窗口-i:是程序图标,app.py是你要打包的py文件 来自 <https://www.zhihu.com/question/31784262 有fail to excute问题直接命令行 pyinstaller xxx.py

matlab的m程序转执行文件exe

转换主要有两步: 第一步 设置编译器 在命令窗口输入 mbuild -setup 根据提示操作即可,.如下图我的设置 第二步 转换执行文件 命令行输入 mcc -m main   即可(输入 mcc -e main  文件执行时没有黑色窗口) 等待时间有些长,其中main 是主程序的函数名根据你的m文件不同需要更改. 在m文件的 开头写 function main 注:如果需要在没有安装matlab环境下运行需要安装软件MCRInstaller.exe  软件在MATLAB安装文件夹中 %\MA

把Jar文件转成exe安装文件

这几天女朋友叫我帮她做一个Windows平台的导出Excel文件的工具,考虑到时间问题,就选择最熟练的语言Java来实现.但是Eclipse打包出来的文件是以jar为后缀的,要想运行这个文件,必须安装jre,对于非开发的用户来说这个没有必要的,所以我准备把.jar文件转为.exe文件. 在网络上查了下,使用exe4j工具来实现转换,软件使用的基本步骤我就不说了,接下来以要创建一个32位.exe目标程序为例,讲一下可能会出现的一些问题: 1.你要清楚的目标文件是32位还是64位的,如果生成的是32

C#调用exe工作目录

C#程序中调用exe发现一个现象. 分别是A.exe一个路径,B.exe和C.exe在另一个相同路径. A.exe调用B.exe,然后B.exe调用C.exe就出现了C.exe调用不正常的现象. 原来A调用B,B的工作目录发生了改变,虽然B,C在同一个目录,但是C在一些初始化配置上出现错误. 解决办法就是在A调用B的时候加上一句话: System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.Worki

VS工作目录,输出目录

C++项目,解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个东东,其中Debug和Release文件夹中存放最终生成的结果exe或dll,要注意如果不使用Release生成,则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件.项目配置文件和一个Debug文件夹以及一个Release文件夹(一定要注意,此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西.如果

Linux Shell编程之softlink invoke与工作目录问题

softlink 又叫做symbolic link,相当于一种"快捷方式",由ln –s sourcefile distinctionfile (ln –s TARGET LINK_NAME)创建,连接文件的存在使得简化了文件系统,用户操作起来更加方便.但在Shell编程中却是一个需要非常注意的点,因为工作目录(Work Directory)的原因,Shell需要使用"标准"的变量(跟系统环境变量有些类似)来定位它当前的工作目录以及这些目录中的文件,假如工作目录定义