日常工作问题总结(三十一)windows获取路径的几个函数GetCurrentDirectory,GetModuleFileName,GetFullPathName
来源:互联网 发布:数控铣床加工中心编程 编辑:程序博客网 时间:2024/06/07 00:06
windows现在具体有多少个获取路径的函数本人不清楚,今天暂时讲下上面提到的几个windows函数。
1.GetCurrentDirectory
DWORD GetCurrentDirectory(DWORDnBufferLength,
//sizeofdirectorybuffer
LPTSTRlpBuffer
//directorybuffer
);
函数功能
参数说明
返回值
2.GetModuleFileName,GetFullPathName
DWORD GetFullPathName( LPCTSTR lpFileName, // file name DWORD nBufferLength, // size of path buffer,建议取值为:MAX_PATH LPTSTR lpBuffer, // path buffer LPTSTR *lpFilePart // address of file name in path ); 功能说明 从一指定文件得到文件的路径 参数说明 LPCTSTR lpFileName, 指定文件的名字 DWORD nBufferLength,缓存区的大小 LPTSTR lpBuffer, 用于存放路径的缓存区 LPTSTR *lpFilePart 文件名的起始地址
DWORD WINAPI GetModuleFileName(HMODULE hModule,LPTSTR lpFileName,DWORD nSize);
GetModuleFileName(NULL,szText,MAX_PATH);//只有第一个参数为NULL,返回当前模块的PathName,否则返回对应dll路径GetFullPathName("",MAX_PATH,szText,NULL);//根据第一个参数提供的文件名(可用相对路径,8.3格式)扩充到含驱动器和目录
GetModuleFileName 是取一个模块(exe,dll)在磁盘上的路径。 GetFullPathName 是把一个8.3格式(dos)的路径转换为长文件名格式。
3.GetCurrentDirectory()和GetMoudleFileName()区别
char* pCurrDir = new char[260]; ::GetCurrentDirectory(260,pCurrDir); delete pCurrDir; char* pModuleDir = new char[260]; ::GetModuleFileName(NULL,pModuleDir,260); delete pModuleDir;
上面代码执行完成后(调试状态):
pCurrDir:"C:\\Users\\dell\\Desktop\\共享内存\\MySharedServer\\MySharedServer"
pModuleDir:"C:\\Users\\dell\\Desktop\\共享内存\\MySharedServer\\Debug\\MySharedServer.exe"
还记得上面看GetCurrentDirectory()函数的函数描述么?什么是当前进程的当前目录?
我自己写了一些代码进行测试,一般在一个进程空间内,这两个得到的地址区别在于“有没有***.exe”应用程序的名称,其他都是一致的,那么为什么有当前目录这个概念?
详解:
GetCurrentDirectory这个是函数原型,他是主要是作用是获取程序的当前目录,大部分指的是当前运行程序所在的运行目录。记得这个地方说的是大部分情况,不是所有,有些特殊的情况会返回时其他的路径。
LPSTR lpath("C:\\Users\\dell\\Desktop\\共享内存\\MySharedServer\\Debug\\MySharedServer.exe");if( !CreateProcess( NULL,lpath, NULL, NULL,FALSE,//1.重点 0, NULL, NULL, &m_ClientSI,&m_ClientPI) ){ZeroMemory( &m_ClientSI, sizeof(m_ClientSI) );m_ClientSI.cb = sizeof(m_ClientSI);}
上面代码不要看字面意思,思路是:用client1进程创建子进程client2,而在client2进程中使用GetCurrentDirectory()和GetModuleFileName()两个函数,此时得出的结果是完全不一样的。
GetCurrentDirectory()得到的是client1客户端的运行目录,GetModuleFileName()得到的还是Client2.exe的应用程序目录。
//下面的一段代码主要是获得当前程序的运行目录(.exe)所在的目录{ CString path; GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH); path.ReleaseBuffer(); int pos = path.ReverseFind('\\'); path = path.Left(pos); }
后来查看了一些资料,微软也承认这个函数有时候不是那么恰当,他的这个获取的值收到很多的影响,所以如果只是为了获取当前程序运行路径,建议使用GetModuleFileName这个函数来处理,这个比较准,因为他获得是当前运行程序的存储路径。
- 日常工作问题总结(三十一)windows获取路径的几个函数GetCurrentDirectory,GetModuleFileName,GetFullPathName
- 获取路径API:GetCurrentDirectory、GetModuleFileName
- 获取文件的绝对路径, GetCurrentDirectory()和GetModuleFileName()函数的区别
- 获取文件的绝对路径, GetCurrentDirectory()和GetModuleFileName()函数的区别
- GetCurrentDirectory()和GetModuleFileName()函数的区别
- GetCurrentDirectory()和GetModuleFileName()函数的区别
- GetCurrentDirectory()和GetModuleFileName()函数的区别
- GetCurrentDirectory()和GetModuleFileName()函数的区别
- 获取文件路径函数之GetModuleFileName()
- windows - 进程 - GetCurrentDirectory和GetModuleFileName
- 路径参数函数:路径的获取(GetModuleFileName)和拆分(_splitpath)
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
- 获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数 .
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
- MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数
- 【泛型】_泛型的其他应用笔记
- apache与tomcat整合入门至简版
- 〖泛型〗_实例讲解—泛型操作范例笔记
- 直接选择排序
- java修改数组长度/大小
- 日常工作问题总结(三十一)windows获取路径的几个函数GetCurrentDirectory,GetModuleFileName,GetFullPathName
- Ubuntu14.04配置cuda-convnet
- 【算法】_004_插入排序
- Android中的Handler总结
- 总结目录
- 【算法】_005_选择排序
- 关于海量数据处理的各种常用数据结构浅谈
- Qt for ios开发:Qt在不同平台下编码问题
- C++内存对象模型