Windows路径操作API函数学习【转载】
文章出自https://www.cnblogs.com/MakeView660/p/6644838.html
前言
在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内容等等。Windows提供了一套关于路径操作的API帮助我们更好的执行这些操作。
路径截断与合并API
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
根据25像素截断后为: ...\sample.txt
PathCompactPathEx* 根据字符个数来生成符合长度的路径
PathSetDlgItemPath 将路径数据设置到对话框的子控件上
PathUndecorate 去除路径中的修饰
PathUnExpandEnvStrings 将路径中部分数据替换为系统环境变量格式
路径查找比较API
PathFindOnPath 从路径中查找路径
PathFindExtension* 查找路径的扩展名
PathFindFileName* 获取路径的文件名
PathFindNextComponent 查找匹配路径,除去盘符之外
PathFindSuffixArray 查找给定的文件名是否有给定的后缀
PathGetArgs 获取路径参数
PathGetCharType 获取路径字符类型
PathGetDriveNumber 根据逻辑盘符返回驱动器序号
路径转换API
PathRelativePathTo 创建一个路径到另一个路径的相对路径。
PathResolve 将一个相对路径或绝对路径转换为一个合格的路径
PathCanonicalize 规范化路径,将格式比较乱的路径整理成规范的路径格式
PathBuildRoot 根据给定的磁盘序号创建根目录路径
CreateDirectory 创建目录
GetShortPathName* 将长路径转为短路径格式
GetLongPathName* 将短路径格式转为长路径
PathGetShortPath* 将长路径转为短路径格式(在后新版本Windows中不可用!)
PathCreateFromUrl 将URL路径转为MS-DOS格式
PathMakePretty* 把路径全部转为小写,增加可读性
PathMakeSystemFolder 给路径增加系统属性
PathUnmakeSystemFolder 去除路径中的系统属性
PathMakeUniqueName 从模板创建统一的路径格式
PathProcessCommand 生成一个可执行的路径这在ShellExecute中比较有用
路径验证API
PathCleanupSpec 去除路径中不合法的字符
PathCommonPrefix 比较并提取两个路径相同的前缀
PathFileExists 验证路径是否存在
PathMatchSpec 判断路径是否匹配制定的扩展名
PathIsDirectory 判断路径是否是一个有效的目录
PathIsFileSpec 验证路径是否一个文件名(有可能是一个路径)
PathIsExe 验证路径是否是可执行文件。
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)”
#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, );
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, , );
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 = ;
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, , 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 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 = 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 = FALSE & no conversion
The content of the converted path is : c:\test\file
Path before calling "PathYetAnotherMakeUniqueName ":
Path after calling "PathYetAnotherMakeUniqueName ": C:\www ().txt
请按任意键继续. . .
希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯分享时的吝啬。
Windows路径操作API函数学习【转载】的更多相关文章
- Windows路径操作API函数学习
前言 在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内容等等.Windows提供了一套关于路径操作的API帮助我们更好的执行这些操作. 路径截断与合并API Pat ...
- windows路径操作API函数
备用,方便查找: PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠"\" PathAddBackslash 在 ...
- Delphi内存操作API函数(备查,并一一学习)
Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...
- Zigbee协议栈OSAL层API函数【转载】
OSAL层提供了很多的API来对整个的协议栈进行管理.主要有下面的几类:信息管理.任务同步.时间管理.中断管理.任务管理.内存管理.电源管理以及非易失存储管理.看到这些管理是不是感 ...
- lua操作常用函数学习一
(1)lua 和 C++之间的交互的基本知识: lua 和 C++ 之间的数据交互通过堆栈进行,栈中的数据通过索引值进行定位,(栈就像是一个容器一样,放进去的东西都要有标号)其中栈顶是-1,栈底是1, ...
- TensorFlow 实现分类操作的函数学习
函数:tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, name=None) 说明:此函数是计算logits经过sigmod函数后的交叉 ...
- lua堆栈操作常用函数学习二
/* ** basic stack manipulation */ LUA_API int <strong> (lua_gettop) (lua_State *L); </str ...
- R-sampe & seq函数学习[转载]
转自:https://blog.csdn.net/u012108367/article/details/69913280 https://blog.csdn.net/qq_33547243/artic ...
- R之ddlpy函数学习[转载]
转自:https://www.cnblogs.com/aloiswei/p/6032513.html 1.函数 ddply(.data, .variables, .fun = NULL, ..., . ...
随机推荐
- centos7-关闭 rpcbind 服务
1.关闭 rpcbind 服务 sudo systemctl disable rpcbind 2.关闭开机自启动 sudo systemctl disable rpcbind 3.立即执行关闭 sy ...
- 学习android文档 -- Adding the Action Bar
1. Setting Up the Action Bar:users-sdk version 11以上可以使用holo主题:如果不使用holo主题,或者sdk版本较低,则需要在manifest文件的& ...
- TeleportArea可瞬移的目标位置
TeleportArea.png 1.可以自定义mesh ,想要什么区域就可以设置什么区域的mesh网格.2.Collider 组件必须有,否则无法进行位置移动,它用来检测激光笔是否打到该区域.3.M ...
- WinDbg中Check for invalid symbols or bad syntax(断点设置)解决办法
基础知识 bp 程序运行过程中下断点 bu 程序未加载之前下断点 bl 列出所有断点 bc 清除断点 今天在调试驱动的时候 发现下好断点后 无法调试 WinDbg显示 kd> g Break ...
- JAVA JDBC大数据量导入Mysql
转自https://blog.csdn.net/q6834850/article/details/73726707?tdsourcetag=s_pctim_aiomsg 采用JDBC批处理(开启事务. ...
- Openstack组件部署 — Networking service_Compute Node
目录 目录 前文列表 安装组件 配置通用组件 配置自服务网络选项 配置Linux 桥接代理 配置Nova使用网络 完成安装 验证操作Execute following commands on Cont ...
- linux 创建多级目录 mkdir -p
原文地址:http://www.dutor.net/index.php/2010/06/cmd-mkdir-p/ mkdir的-p选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录.例如,我 ...
- CSS中block,inline和block-inline的区别(转载)
http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level e ...
- java-day21
# DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... ...
- CF#541 D. Gourmet choice /// BFS 拓扑
题目大意: 给定n m 第一行有n个数 第二行有m个数 接下来n行每行m列 有 = < > 位于 i j 的符号表示 第一行第i个数与第二行第j个数的大小关系 1.将n+m个数 当做按顺序 ...