获取本进程所在目录

获取本进程所在目录,简单的可以直接使用GetCurrentDirectory函数获取本进程所在的目录(确切的说是工作目录),但是在很多特殊情况下取到目录可能是被修改过的,比如在debug模式这个函数取到并不是真正的当前目录而是.vcproj文件所在文件夹下。

 

方法1:直接使用系统的API,注意这里面的GetLongPathName函数只是为了将路径转成长路径,因为如果在很多特殊文件夹下,那么我们取到的路径是缩写的。

     TCHAR szbufPath[MAX_PATH]= TEXT("");

     TCHAR szLongPath[MAX_PATH] = TEXT("");

    ::GetModuleFileName(NULL,szbufPath, MAX_PATH);

    ::GetLongPathName(szbufPath,szLongPath,MAX_PATH);

    ::PathRemoveFileSpec(szLongPath);//不包括最后面的\, 就是文件夹路径

当然,方法1需要包含下面的头文件和库文件

#include <Shlwapi.h>

#pragma comment(lib,"Shlwapi.lib")

但是shlwapi只支持win xp sp2和win server 2003以后的系统

详情:http://msdn.microsoft.com/en-us/library/bb759845%28VS.85%29.aspx

 

方法2:使用字符串函数自己搜索\所在的地方,然后去除后部分

    TCHAR szbufPath[MAX_PATH] = TEXT("");

    TCHAR szLongPath[MAX_PATH] = TEXT("");

    ::GetModuleFileName(NULL,szbufPath, MAX_PATH);

    ::GetLongPathName(szbufPath,szLongPath,MAX_PATH);

    LPCTSTR lpTemp = _tcsrchr(szLongPath, '\\');

    *_tcsstr(szLongPath,lpTemp)= 0;

方法3:也是使用字符串函数直接去除本进程的名字,某种程度上说比较死板

    TCHAR szbufPath[MAX_PATH] = TEXT("");

    TCHAR szLongPath[MAX_PATH] = TEXT("");

    ::GetModuleFileName(NULL,szbufPath, MAX_PATH);

    ::GetLongPathName(szbufPath,szLongPath,MAX_PATH);

    *_tcsstr(szLongPath,TEXT("\\StringTest.exe"))= 0;

一般来说推荐方法2。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值