MFC 将 '当前工作路径' 改为 'exe所在路径'(转)

原文转自 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:	est	est.exe -> "C:	est", "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:	est	est.exe 得到 "C:	est", "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("    调整进程当前目录为程序可执行文件所在目录 
");        
    printf(" - http://blog.csdn.net/morewindows/article/details/8683519 -
");
    printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --

");  

    char szCurrentDirectory[MAX_PATH];
    GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
    printf("进程当前目录为: 
%s
", szCurrentDirectory);

    AdjustProcessCurrentDirectory();

    GetCurrentDirectory(MAX_PATH, szCurrentDirectory);
    printf("
调整后,进程当前目录为: 
%s
", szCurrentDirectory);
    getch();
    return 0;
}

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

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

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

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

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

原文地址:https://www.cnblogs.com/happykoukou/p/8979983.html