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

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

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

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8683519

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

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

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) == 0)
		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 0;
}

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

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

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

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

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8683519

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

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/heishanglaoyao/p/10489810.html

时间: 2024-10-14 03:54:25

Windows VC++ 调整进程当前目录为程序可执行文件所在目录的相关文章

Windows下tomcat进程监控批处理程序

在Windows下tomcat进程监控批处理程序脚本如下: @echo off ::tomcat安装目录 set _tomcatDir=E:\myFiles\apache-tomcat-8.5.31 set _curlDir=E:\myFiles\apache-tomcat-8.5.31\curl set "httpcode=" ::访问tomcat cd /d %_curlDir% for /f "delims=" %%r in ('CURL.EXE -m 60

windows简单杀死进程的批处理程序

新建一个txt文档,命令为taskkill.bat,复制下面的命令保存 @echo offtaskkill /F /IM vm* /Ttaskkill /F /IM apple* /Ttaskkill /F /IM sogoucloud.exe /Ttaskkill /F /IM itunes* /T taskkill 的参数说明 /S system 指定要连接到的远程系统. /U [domain\]user 指定应该在哪个用户上下文执行这个命令. /P [password] 为提供的用户上下文

windows下cmd命令提示符下让程序后台运行命令

如果你的程序需要在windows后台运行,并且是在cmd下启动,那么在执行的程序前加上start /b,比如start /b [程序名]. windows下start命令的详细参数及功能介绍如下: 文章来源 www.169it.com 启动一个单独的窗口运行指定的程序或命令. START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /

如何制作exe程序可执行文件

很多软件的运行都需要搭建环境,只有exe文件可以在不安装软件和数据库的环境下运行,那么怎么制作exe程序可执行文件呢,下面天使教你如何制作. 工具/原料 Microsoft Visual Studio 2008 方法/步骤 1 双击桌面上的Microsoft Visual Studio 2008,打开软件 2 点击[文件]--[新建项目]--[windows窗体应用程序] 3 输入项目名称,选择程序文件路径,点击[确定] 4 这样就打开了项目编辑窗口,完全的可视化编程界面 5 修改窗体里面的TE

[转]VC中调用外部exe程序方式

本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProcess,别人已经总结的很好了<vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess>,我全文转载一下,另外后面加点自己的总结(黑体部分,除了标题). 三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实

windows服务和进程的区别和联系

Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Service可以在操作系统启动的时候开始,一直在后台运行,当有需要时也可以手动启动,我们可以通过管理工具里面的服务进行统一管理. 当系统启动完毕后,Windows服务并不需要通过登陆页面后才能启动,而我们启动一般的exe文件却要先登陆Windows后才能启动它. Windows Service 是一种可随

[转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess

三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂.    WinExec 两个参数,前一个指定路径,后一个指定显示方式.    ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等.    Cr

Windows编程 - 终止可执行(exe)程序 代码(C++)

终止可执行(exe)程序 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 终止可执行(exe)程序, 首先遍历进程, 找到进程名称对于的进程ID号, 然后根据进程ID, 终止进程. 示例代码: 包括遍历进程代码, 和关闭代码. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <

Windows Socket编程示例-TCP示例程序

前面一部分是介绍,后面有示例 1.网络中进程之间如何通信? 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. 使用TCP