最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin5浏览0评论

在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://wwwblogs/pegasus923/archive/2010/11/02/1867584.html

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

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






发布评论

评论列表(0)

  1. 暂无评论