写C++,路径的问题一直都让人很头疼,抽空整理一些方法;可以对比着Python中OS.Path相关去看效果会更好。
1."./" 加不加都一样,就是指当前目录
2."../" 表示当前目录的上级目录,即当前的父目录。
(这里的当前目录就是指.vcxproj和当前运行的.cpp文件所在目录,而不是.sln文件所在目录)
注意:前面两种在工程文件夹里面执行时没有问题的,但是打包成DLL,被调用就行不通了;
3.获取当前执行文件的路径(不包括文件名)——(dll获取自身路径)
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, path);
4.GetModuleFileName(NULL,exeFullPath,MAX_PATH);//得到程序模块名称,全路径,也就是当前运行程序的全路径
GetModuleFileName函数原型
DWORD GetModuleFileName(
HMODULE hModule, //将要得到的模块的句柄;如果是当前模块,NULL
LPTSTR lpFilename, //保存路径缓存区的名字
DWORD nSize //缓存区的大小
路径截断与合并函数 |
|
|
|
PathRemoveArgs | 去除路径的参数 |
PathRemoveBackslash | 去除路径最后的反斜杠“\” |
PathAddBackslash | 在路径最后加上反斜杠“\” |
PathRemoveBlanks | 去除路径前后的空格 |
PathAddExtension | 在文件路径后面加上扩展名 |
PathRemoveExtension | 去除文件路径扩展名 |
PathRenameExtension | 更改文件路径扩展名 |
PathRemoveFileSpec | 去除文件名,得到目录 |
PathUnquoteSpaces | 去除路径中的首尾空格 |
PathQuoteSpaces | 判断路径中是否有空格,有的话,就是用“”引号把整个路径包含起来 |
|
|
PathAppend | 将一个路径追加到另一个路径后面 |
PathCombine | 合并两个路径 |
|
|
PathSkipRoot | 去掉路径中的磁盘符或UNC部分。 |
PathStripPath | 去掉路径中的目录部分,得到文件名。 |
PathStripToRoot | 去掉路径的文件部分,得到根目录。 |
|
|
PathCompactPath | 根据像素值生成符合长度的路径。 如原始路径: C:\path1\path2\sample.txt 根据120像素截断后为: C:\pat...\sample.txt |
PathCompactPathEx | 根据字符个数来生成符合长度的路径。 |
|
|
PathSetDlgItemPath | 将路径数据设置到对话框的子控件上。 |
PathUndecorate | 去除路径中的修饰——具体还没看明白,MSDN的例子只是去掉了括号。 |
PathUnExpandEnvStrings | 将路径中部分数据替换为系统环境变量格式 |
路径查找比较函数 |
|
PathFindOnPath | 从路径中查找路径 |
PathFindExtension | 查找路径的扩展名 |
PathFindFileName | 获取路径的文件名 |
PathFindNextComponent | 查找匹配路径(不太熟悉) |
PathFindSuffixArray | 查找给定的文件名是否有给定的后缀。 |
PathGetArgs | 获取路径参数 |
PathGetCharType | 获取路径字符类型 |
PathGetDriveNumber | 根据逻辑盘符返回驱动器序号 |
|
|
路径转换函数 |
|
PathRelativePathTo | 创建一个路径到另一个路径的相对路径。 |
PathResolve | 将一个相对路径或绝对路径转换为一个合格的路径,这个理解起来比较拗口。 |
PathCanonicalize | 规范化路径。将格式比较乱的路径整理成规范的路径格式。 |
PathBuildRoot | 根据给定的磁盘序号创建根目录路径 |
CreateDirectory | 创建目录 |
|
|
GetShortPathName | 将长路径转为8.3格式的短路径格式 |
GetLongPathName | 将短路径格式转为长路径。 |
PathGetShortPath | 将长路径转为短路径格式(8.3格式) |
PathCreateFromUrl | 将URL路径转为MS-DOS格式 |
PathMakePretty | 把路径全部转为小写,增加可读性。 |
PathMakeSystemFolder | 给路径增加系统属性 |
PathUnmakeSystemFolder | 去除路径中的系统属性。 |
PathMakeUniqueName | 从模板创建统一的路径格式——没用过,不熟悉 |
PathProcessCommand | 生成一个可执行的路径,比如有参数的,会自动将路径用“”包含。 这在ShellExecute中比较有用。 |
路径验证函数 |
|
PathCleanupSpec | 去除路径中不合法的字符 |
PathCommonPrefix | 比较并提取两个路径相同的前缀 |
PathFileExists | 验证路径是否存在 |
PathMatchSpec | 判断路径是否匹配制定的扩展名。 |
PathIsDirectory | 判断路径是否是一个有效的目录 |
PathIsFileSpec | 验证路径是否一个文件名(有可能是一个路径) |
PathIsExe | 验证路径是否是可执行文件。注意:不仅仅是.exe,还有.bat,.com,.src等 |
PathIsRoot | 路径是否为根路径 |
PathIsRelative | 判断路径是否是相对路径 |
PathIsContentType | 检测文件是否为制定类型。 例如:PathIsContentType( “hello.txt” , “text/plain” ) 返回TRUE PathIsContentType( “hello.txt” , “image/gif” ) 返回FALSE |
PathIsHTMLFile | 判断路径是否是html文件类型——根据系统注册类型判断。 |
PathIsLFNFileSpec | 判断路径是否是长路径格式 |
PathIsNetworkPath | 判断路径是否是一个网络路径。 |
PathIsPrefix | 判断路径是否含有指定前缀 |
PathIsSameRoot | 判断路径是否有相同根目录 |
PathIsSlow | 判断路径是否是一个高度延迟的网络连接——我也不太明白是啥意思。 |
PathIsSystemFolder | 判断路径是否有系统属性(属性可以自己设定) |
PathIsUNC | 路径是否是UNC格式(网络路径) |
PathIsUNCServer | 路径是否是UNC服务器 |
PathIsUNCServerShare | 路径是否仅仅是UNC的共享路径格式 |
PathIsURL | 路径是否是http格式。 |
PathYetAnotherMakeUniqueName | 基于已存在的文件,自动创建一个唯一的文件名。比较有用,比如存在“新建文件”,此函数会创建文件名“新建文件(2)”。 |