|
- 文件路径处理的相关函数
- 相关函数在头文件<Shlwapi.h>中,需要#pragma comment(lib, “shlwapi.lib”)
- 获取当前运行的exe程序的位置
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(nullptr, filePath, MAX_PATH);
-
- 获取当前运行的dll位置
- extern CDialogApp theApp;
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(theApp.m_hInstance, filePath, MAX_PATH);
-
- 去除文件名,得到目录
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(nullptr, filePath, MAX_PATH);
- //C:\\usr\\WorkSpace\\Test\\a.exe ==> C:\\usr\\WorkSpace\\Test
- ::PathRemoveFileSpec(filePath);
-
- 在文件路径后面添加或者删除 \
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(nullptr, filePath, MAX_PATH);
- // C:\\usr\\WorkSpace\\Test\\a.exe ==> C:\\usr\\WorkSpace\\Test
- ::PathRemoveFileSpec(filePath);
- // C:\\usr\\WorkSpace\\Test ==> C:\\usr\\WorkSpace\\Test\\
- ::PathAddBackslash(exePath);
- // C:\\usr\\WorkSpace\\Test\\ ==> C:\\usr\\WorkSpace\\Test
- ::PathRemoveBackslash(exePath);
-
- 去除目录部分,得到文件名
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(nullptr, filePath, MAX_PATH);
- // C:\\usr\\WorkSpace\\Test\\a.exe ==> a.exe
- ::PathStripPath(exePath);
-
- 去掉路径的文件部分,得到根目录。
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(nullptr, filePath, MAX_PATH);
- // C:\\usr\\WorkSpace\\Test\\a.exe ==> C:\\
- ::PathStripToRoot(exePath);
-
- 去掉路径中的空格
- char filePath[MAX_PATH] = {0};
- ::GetModuleFileName(nullptr, filePath, MAX_PATH);
- ::PathUnquoteSpaces(filePath);
- ::PathRemoveBlanks(filePath);
-
- 一些其他函数
- #include <windows.h>
- #include <iostream>
- #include <Shlwapi.h>
- #include <shlobj.h>
- #pragma comment(lib, "shlwapi.lib");
- using namespace std;
- void main( void )
- {
- // PathRemoveArgs
- char buffer_0[ ] = "c:\\a\\b\\FileA Arg1 Arg2";
- char *lpStr0;
- lpStr0 = buffer_0;
- cout << "Path before calling "PathRemoveArgs": " << lpStr0 << endl;
- PathRemoveArgs(lpStr0);
- cout << "Path before calling "PathRemoveArgs": " << lpStr0 << endl;
- // PathRemoveBackslash
- char buffer_1[ ] = "c:\\a\\b\\File\";
- char *lpStr1;
- lpStr1 = buffer_1;
- cout << "Path before calling "PathRemoveBackslash": " << lpStr1 << endl;
- PathRemoveBackslash(lpStr1);
- cout << "Path after calling "PathRemoveBackslash": " << lpStr1 << endl;
- // PathAddBackslash
- char buffer_2[MAX_PATH] = "c:\\a\\b\\File";
- char *lpStr2;
- lpStr2 = buffer_2;
- cout << "Path before calling "PathAddBackslash": " << lpStr2 << endl;
- PathAddBackslash(lpStr2);
- cout << "Path after calling "PathAddBackslash": " << lpStr2 << endl;
-
- // PathRemoveBlanks
- char buffer_3[ ] = " c:\\TEST\\File1\\File2 ";
- char *lpStr3;
- lpStr3 = buffer_3;
- cout << "Path before calling "PathRemoveBlanks": " << lpStr3 << endl;
- PathRemoveBlanks(lpStr3);
- cout << "Path after calling "PathRemoveBlanks": " << lpStr3 << endl;
- // PathAddExtension
- char buffer_4[MAX_PATH] = "file";
- char *lpStr4;
- lpStr4 = buffer_4;
- char *lpExt = ".txt";
- cout << "Path before calling "PathAddExtension": " << lpStr4 << endl;
- PathAddExtension(lpStr4, lpExt);
- cout << "Path after calling "PathAddExtension": " << lpStr4 << endl;
- // PathRemoveExtension
- char buffer_5[ ] = "C:\\TEST\\sample.txt";
- char *lpStr5;
- lpStr5 = buffer_5;
- cout << "Path before calling "PathRemoveExtension": " << lpStr5 << endl;
- PathRemoveExtension(lpStr5);
- cout << "Path after calling "PathRemoveExtension": " << lpStr5 << endl;
- // PathRenameExtension
- char buffer_6[ ] = "C:\\TEST\\sample.txt";
- char *lpStr6;
- lpStr6 = buffer_6;
- char *lpReExt = ".doc";
- cout << "Path before calling "PathRenameExtension": " << lpStr6 << endl;
- PathRenameExtension(lpStr6, lpReExt);
- cout << "Path after calling "PathRenameExtension": " << lpStr6 << endl;
- // PathRemoveFileSpec
- char buffer_7[ ] = "C:\\TEST\\sample.txt";
- char *lpStr7;
- lpStr7 = buffer_7;
- cout << "Path before calling "PathRemoveFileSpec": " << lpStr7 << endl;
- PathRemoveFileSpec(lpStr7);
- cout << "Path after calling "PathRemoveFileSpec": " << lpStr7 << endl;
- // PathUnquoteSpaces
- char buffer_8[ ] = ""C:\\path1\\path2"";
- char *lpStr8;
- lpStr8 = buffer_8;
- cout << "Path before calling "PathUnquoteSpaces": " << lpStr8 << endl;
- PathUnquoteSpaces(lpStr8);
- cout << "Path after calling "PathUnquoteSpaces": " << lpStr8 << endl;
- // PathQuoteSpaces
- char buffer_9[MAX_PATH] = "C:\\sample_one\\sample two";
- char *lpStr9;
- lpStr9 = buffer_9;
- cout << "Path before calling "PathQuoteSpaces ": " << lpStr9 << endl;
- PathQuoteSpaces (lpStr9);
- cout << "Path after calling "PathQuoteSpaces ": " << lpStr9 << endl;
-
- // PathAppend
- /*
- BOOL PathAppend(
- LPTSTR pszPath,
- LPCTSTR pszMore
- );
- */
- // PathCombine
- /*
- LPTSTR PathCombine(
- LPTSTR lpszDest,
- LPCTSTR lpszDir,
- LPCTSTR lpszFile
- );
- */
- // PathStripPath
- TCHAR szPath1[] = TEXT("c:\\dir1\\file.txt");
- cout << "Path before calling "PathQuoteSpaces ": " << szPath1 << endl;
- PathStripPath(szPath1);
- cout << "Path after calling "PathQuoteSpaces ": " << szPath1 << endl;
- // PathCompactPath
- char buffer_10[MAX_PATH] = "C:\\path1\\path2\\sample.txt";
- char *lpStr10;
- lpStr10 = buffer_10;
- HDC hdc = GetDC(NULL);
- cout << "The un-truncated path is " << lpStr10 << endl;
- PathCompactPath(hdc, lpStr10, 125);
- cout << "The truncated path at 125 pixels is : " << lpStr10 << endl;
- // PathCompactPathEx
- char buffer_dst[MAX_PATH] = "";
- char *lpStrDst;
- lpStrDst = buffer_dst;
- char buffer_Org[MAX_PATH] = "C:\\path1\\path2\\sample.txt";
- char *lpStrOrg;
- lpStrOrg = buffer_Org;
-
- cout << "Path before calling "PathCompactPathEx ": " << lpStrOrg << endl;
- PathCompactPathEx(lpStrDst, lpStrOrg, 10, 0);
- cout << "Path after calling "PathCompactPathEx ": " << lpStrDst << endl;
-
- // PathFindExtension
- char buffer_Rev[MAX_PATH] = "";
- char *lpStrRev;
- lpStrRev = buffer_Rev;
- char buffer_11[] = "C:\\www.txt";
- char *lpStr11;
- lpStr11 = buffer_11;
- cout << "Path before calling "PathFindExtension ": " << lpStr11 << endl;
- lpStrRev = PathFindExtension(lpStr11);
- cout << "Path after calling "PathFindExtension ": " << lpStrRev << endl;
- // PathFindFileName
- cout << "Path before calling "PathFindFileName ": " << lpStr11 << endl;
- lpStrRev = PathFindFileName(lpStr11);
- cout << "Path after calling "PathFindFileName ": " << lpStrRev << endl;
- // PathFindNextComponent
- char buffer_12[ ] = "c:\\path1\\path2\\test";
- char *lpStr12;
- lpStr12 = buffer_12;
- cout << "Search a path for the next path component after the root " << lpStr1 << endl;
- cout << "Return the next path component: "" << PathFindNextComponent(lpStr1) << """ << endl;
- // PathFindSuffixArray (case-sensitive )
- char* pszFilePath = "c:\\path1\\path2\\test.rtl";
- LPCTSTR FILE_EXT_NAME[] = {".mp3", ".doc", ".rtl", ".ogg"};
- const LPCTSTR* suffix_array = FILE_EXT_NAME;
- int iArraySize = 4;
- LPCTSTR lpStrRevStr = PathFindSuffixArray(pszFilePath, suffix_array, iArraySize);
-
- cout << "Path before calling "PathFindSuffixArray ": " << pszFilePath << endl;
- cout << "Path after calling "PathFindSuffixArray ": " << lpStrRevStr << endl;
- // GetLongPathName
- // GetShortPathName
- // PathGetShortPath() It might be altered or unavailable in subsequent versions of Windows.
- // PathMakePretty
- char buffer_13[ ] = "C:\\TEST\\FILE";
- char *lpStr13;
- lpStr13 = buffer_13;
- char buffer_14[ ] = "c:\\test\\file";
- char *lpStr14;
- lpStr14 = buffer_14;
- cout << "The content of the unconverted path is : " << lpStr13 << endl;
- cout << "The "PathMakePretty" function returns the value "
- << PathMakePretty(lpStr13) << " = TRUE & converts" << endl;
- cout << "The content of the converted path is : " << lpStr13 << endl;
- cout << "The content of the unconverted path is : " << lpStr14 << endl;
- cout << "The "PathMakePretty" function returns the value "
- << PathMakePretty(lpStr4) << " = FALSE & no conversion" << endl;
- cout << "The content of the converted path is : " << lpStr14 << endl;
- // PathYetAnotherMakeUniqueName(Unicode String)
- WCHAR* pszUniqueName = new WCHAR[MAX_PATH];
- memset(pszUniqueName, 0, MAX_PATH);
- WCHAR* pszPath = L"C:\";
- WCHAR* pszShort = NULL;
- WCHAR* pszFileSpec = L"www.txt";
-
- wcout << "Path before calling "PathYetAnotherMakeUniqueName ": " << pszUniqueName << endl;
- BOOL bRet = PathYetAnotherMakeUniqueName(pszUniqueName, pszPath, pszShort, pszFileSpec);
- wcout << "Path after calling "PathYetAnotherMakeUniqueName ": " << pszUniqueName << endl;
- if (pszUniqueName)
- {
- delete pszUniqueName;
- pszUniqueName = NULL;
- }
- }
-
- 结果
- Path before calling "PathRemoveArgs": c:\a\b\FileA Arg1 Arg2
- Path before calling "PathRemoveArgs": c:\a\b\FileA
- Path before calling "PathRemoveBackslash": c:\a\b\File\
- Path after calling "PathRemoveBackslash": c:\a\b\File
- Path before calling "PathAddBackslash": c:\a\b\File
- Path after calling "PathAddBackslash": c:\a\b\File\
- Path before calling "PathRemoveBlanks": c:\TEST\File1\File2
- Path after calling "PathRemoveBlanks": c:\TEST\File1\File2
- Path before calling "PathAddExtension": file
- Path after calling "PathAddExtension": file.txt
- Path before calling "PathRemoveExtension": C:\TEST\sample.txt
- Path after calling "PathRemoveExtension": C:\TEST\sample
- Path before calling "PathRenameExtension": C:\TEST\sample.txt
- Path after calling "PathRenameExtension": C:\TEST\sample.doc
- Path before calling "PathRemoveFileSpec": C:\TEST\sample.txt
- Path after calling "PathRemoveFileSpec": C:\TEST
- Path before calling "PathUnquoteSpaces": "C:\path1\path2"
- Path after calling "PathUnquoteSpaces": C:\path1\path2
- Path before calling "PathQuoteSpaces ": C:\sample_one\sample two
- Path after calling "PathQuoteSpaces ": "C:\sample_one\sample two"
- Path before calling "PathQuoteSpaces ": c:\dir1\file.txt
- Path after calling "PathQuoteSpaces ": file.txt
- The un-truncated path is C:\path1\path2\sample.txt
- The truncated path at 125 pixels is : C:\pa...\sample.txt
- Path before calling "PathCompactPathEx ": C:\path1\path2\sample.txt
- Path after calling "PathCompactPathEx ": ...\sa...
- Path before calling "PathFindExtension ": C:\www.txt
- Path after calling "PathFindExtension ": .txt
- Path before calling "PathFindFileName ": C:\www.txt
- Path after calling "PathFindFileName ": www.txt
- Search a path for the next path component after the root c:\a\b\File
- Return the next path component: "a\b\File"
- Path before calling "PathFindSuffixArray ": c:\path1\path2\test.rtl
- Path after calling "PathFindSuffixArray ": .rtl
- The content of the unconverted path is : C:\TEST\FILE
- The "PathMakePretty" function returns the value 1 = TRUE & converts
- The content of the converted path is : C:\test\file
- The content of the unconverted path is : c:\test\file
- The "PathMakePretty" function returns the value 0 = FALSE & no conversion
- The content of the converted path is : c:\test\file
- Path before calling "PathYetAnotherMakeUniqueName ":
- Path after calling "PathYetAnotherMakeUniqueName ": C:\www (2).txt
- 请按任意键继续. . .
-
- //去除路径的参数
- PathRemoveArgs
- //去除路径最后的反斜杠”\”
- PathRemoveBackslash
- //在路径最后加上反斜杠”\”
- PathAddBackslash
- //去除路径前后的空格
- PathRemoveBlanks
- //在文件路径后面加上扩展名
- PathAddExtension
- //去除文件路径扩展名
- PathRemoveExtension
- //更改文件路径扩展名
- PathRenameExtension
- //去除文件名,得到目录
- PathRemoveFileSpec
- //去除路径中的首尾空格
- PathUnquoteSpaces
- //判断路径中是否有空格,有的话,就是用”“引号把整个路径包含起来
- PathQuoteSpaces
- //将一个路径追加到另一个路径后面
- PathAppend
- //合并两个路径
- PathCombine
- //去掉路径中的磁盘符或UNC部分
- PathSkipRoot
- //去掉路径中的目录部分,得到文件名
- PathStripPath
- //去掉路径的文件部分,得到根目录
- PathStripToRoot
- //根据像素值生成符合长度的路径
- PathCompactPath
- //如原始路径: C:\path1\path2\sample.txt
- //根据120像素截断后为: C:\pat…\sample.txt
- //根据25像素截断后为: …\sample.txt
- //根据字符个数来生成符合长度的路径
- PathCompactPathEx
- //将路径数据设置到对话框的子控件上
- PathSetDlgItemPath
- //去除路径中的修饰
- PathUndecorate
- //将路径中部分数据替换为系统环境变量格式
- PathUnExpandEnvStrings
- //从路径中查找路径
- PathFindOnPath
- //查找路径的扩展名
- PathFindExtension
- //获取路径的文件名
- PathFindFileName
- //查找匹配路径
- PathFindNextComponent
- //查找给定的文件名是否有给定的后缀
- PathFindSuffixArray
- //获取路径参数
- PathGetArgs
- //获取路径字符类型
- PathGetCharType
- //根据逻辑盘符返回驱动器序号
- PathGetDriveNumber
- //创建一个路径到另一个路径的相对路径。
- PathRelativePathTo
- //将一个相对路径或绝对路径转换为一个合格的路径
- PathResolve
- //规范化路径。将格式比较乱的路径整理成规范的路径格式
- PathCanonicalize
- //根据给定的磁盘序号创建根目录路径
- PathBuildRoot
- //创建目录
- CreateDirectory
- //将长路径转为8.3格式的短路径格式
- GetShortPathName
- //将短路径格式转为长路径。
- GetLongPathName
- //将长路径转为短路径格式(8.3格式)
- PathGetShortPath
- //将URL路径转为MS-DOS格式
- PathCreateFromUrl
- //把路径全部转为小写,增加可读性
- PathMakePretty
- //给路径增加系统属性
- PathMakeSystemFolder
- //去除路径中的系统属性
- PathUnmakeSystemFolder
- //从模板创建统一的路径格式
- PathMakeUniqueName
- //生成一个可执行的路径,比如有参数的,会自动将路径用”“包含
- PathProcessCommand
- //去除路径中不合法的字符
- 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
- //判断路径是否是html文件类型——根据系统注册类型判断
- PathIsHTMLFile
- //判断路径是否是长路径格式
- PathIsLFNFileSpec
- //判断路径是否是一个网络路径。
- PathIsNetworkPath
- //判断路径是否含有指定前缀
- PathIsPrefix
- //判断路径是否有相同根目录
- PathIsSameRoot
- //判断路径是否是一个高度延迟的网络连接
- PathIsSlow
- //判断路径是否有系统属性(属性可以自己设定)
- PathIsSystemFolder
- //路径是否是UNC格式(网络路径)
- PathIsUNC
- //路径是否是UNC服务器
- PathIsUNCServer
- //路径是否仅仅是UNC的共享路径格式
- PathIsUNCServerShare
- //路径是否是http格式。
- PathIsURL
- //基于已存在的文件,自动创建一个唯一的文件名。比如存在”新建文件”,此函数会创建文件名”新建文件(2)”
- PathYetAnotherMakeUniqueName
-
复制代码 |
|