• 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

  • 相关阅读:
    css伪类函数 :is() 和 :where()
    卷积层 / 全连接层 的空间和计算复杂度
    mysql中分组获取前三条记录的方法
    sql server数据去重复的四种方法
    C#获取dynamic(动态)实体的属性值
    Sqlserver使用游标循环插入,把上一个select语句的结果当成value值的一部分insert到一张表
    红玫瑰与白玫瑰
    解决vue3中通过params传值以后,刷新页面,params丢失问题。
    mybatis 注解的方式查询
    了解Android已发布的各种版本(即1.0、2.0、3.0、4.0、5.0、6.0、7.0、8.0)
  • 原文地址:https://www.cnblogs.com/happykoukou/p/8979983.html
Copyright © 2020-2023  润新知