您的位置:首页 > 其它

GetCurrentDirectory()和GetModuleFileName()函数的区别

2010-09-02 23:21 627 查看
GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目录

GetCurrentDirectory()适用于XP等系统,在WinCE上不能使用

GetModuleFileName()适用于WinCE2.0以后

GetCurrentDirectory只是获取当前的目录,当计算机重新启动后,当前的路径一般为系统目录,因此系统启动后,使用该函数只能获取当前的目录,而不是应用程序所在的目录。我建议你使用GetModuleFileName函数,GetModuleFileName()是一个得到路径的API 函数。

当执行GetModuleFileName()这个函数时,返回本程序所在的绝对路径,包括本程序的文件名。


使用方法:

//下面的一段代码主要是获得当前程序的运行目录(.exe)所在的目录

{

CString path;

GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);

path.ReleaseBuffer();

int pos = path.ReverseFind('//');

path = path.Left(pos);

}

GetModuleFileName函数

WINAPI DWORD GetModuleFileName(
HMODULE hModule,
LPWSTR lpFilename,
DWORD nSize
);

GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是如果分配的空间大于实际保存的字符串(0结尾),
ReleaseBuffer会把多余申请的空间释放, 归还给系统; 但使用时需要注意以下问题: 如果要保存的字符串为abc(0结尾),则GetBuffer参数应至少
为3; 如果要保存的内容不是以0结尾, 比如是读取文件数据, 则GetBuffer参数如果大于文件长度时,ReleaseBuffer参数一定要为文件长度(如果
GetBuffer参数为文件长度的话不存在问题,ReleaseBuffer参数可以为默认-1)!
GetBufferSetLength相对比较容易理解, 它申请一个指定长度的空间, 即使里面最终保存的字符串长度小于申请的空间长度, 也不会将
多余空间释放.

参考资料:

http://blog.chinaunix.net/u2/61062/showart_1892515.html

http://blog.sina.com.cn/s/blog_5ca9d9af0100bh8s.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐