在Windows下C++获得程序路径

在Windows下C++编程经常需要获得程序路径,因为很多文件都保存在安装文件夹下。

首先百度一下!偷笑

1、GetModuleFileName函数定义如下:

DWORD WINAPI GetModuleFileName(
    _In_opt_  HMODULE hModule,
    _Out_     LPTSTR lpFilename,
    _In_      DWORD nSize
);

获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。

如果想要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx函数。

这里的完全路径中包括运行程序的文件名。所以要得到需要文件夹路径需要将文件名去掉……

下面函数的功能实现了,代码如下:

	wstring GetProgramDir()  
	{   
		TCHAR exeFullPath[MAX_PATH]; // Full path
		GetModuleFileName(NULL,exeFullPath,MAX_PATH);
		wstring strPath = __TEXT("");		
		strPath = (wstring)exeFullPath;    // Get full path of the file
		int pos = strPath.find_last_of(L'\\', strPath.length());
		return strPath.substr(0, pos);  // Return the directory without the file name
	}   
本来想用 TCHAR和__TEXT这类比较通用的,但是懒了……

调用函数即可得到。

2、GetCurrentDirectory函数

定义如下:

DWORD GetCurrentDirectory(
		DWORD nBufferLength,//sizeofdirectorybuffer
		LPTSTR lpBuffer//directorybuffer
		);


函数功能:
获取当前进程的当前目录。
注意当前目录这东西有点怪异,本来确实是可执行文件的所在目录,但是当用文件对话框成功打开一个文件后,该目录就被修改为被打开的文件所在目录。比如在程序中使用"123.txt"这样的文件名,希望将它存储在exe文件所在目录中,但是当用户用文件对话框打开一个文件"F:\456.txt"后,这个123.txt会被存储到F盘下。(VC2005下的情况,其他VC版本待验证)

参考文章:

http://www.cnblogs.com/pegasus923/archive/2010/11/02/1867584.html

http://baike.baidu.com/link?url=0zkwvBhzPyZbD4p0qcYuX4yGnKrWcJv01xMm64jHwKKrnhQMuOz4KvTQESCnLOyLbxYMCORp4NMKm7fQRIJEYq

http://baike.baidu.com/link?url=KnnbF7aLBZh7nabBmOgkp2qo7mAXuL5hHi_PVZ5P4pzvsHGG85VQbIgsQYAAAgwbJqTgpeUg4U5A_NQ6CRAjma#2_1






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值