Windows中有一个Shlwapi.dll文件,包含了大量的Windows字符串处理方法,这些方法,在通常的程序应用中,经常会用到,有一部分处理方法,在CRuntime中也存在,但不方便使用。有一部分函数,也有相关的Windows API函数,如StrCpy对应的lstrcpy之类的字符串处理函数。从Shlwapi名称看,这个应该是Windows的Shell API函数。
使用方法:
1. 加入#include <shlwapi.h>.
2. 在project(工程)->setting(设置)->link(连接)下objiect/library modules(对象/库模块)中加入shlwapi.lib
不管怎么说,Shlwapi.dll提供了大量处理Windows字符串的方法,这些方法,可以让你工作更加简便,通常,我们需要获取一个文件名的后缀名,使用MFC的CString查找字符串可以获取,但是麻烦,每个人的实现都不一样,用Shlwapi中提供的函数PathFindExtension直接就返回一个后缀名的指针。
Shlwapi主要分为三类函数,第一类是字符串处理函数,通常以Str开头,第二类是路径或者文件夹处理函数,通常以Path开头,第三类是注册表处理函数,通常以SH开头。每一类函数,都要区分A和W。
常见的字符串处理函数有:
StrChr ,StrChrI,StrCmpN,StrCmpNI,StrCSpn,StrCSpnI,StrDup,StrFormatByteSize(字节大小格式化),StrFromTimeInterval,StrIsIntlEqual,StrNCat,StrPBrk,StrRChr, StrRChrI,StrRStrI,StrSpn,StrStr,StrStrI,StrToInt,StrToIntEx(可以讲16进制字符串转换为10进制值),StrTrim(删除收尾空字符串),StrCat,StrCmp,StrCpy,ChrCmpI,
常见的Path处理函数有:
PathAddBackslash,PathAddExtension,PathAppend,PathBuildRoot, PathCanonicalize,PathCombine,PathCompactPath,PathCompactPathEx,PathCommonPrefix,PathFileExists,PathFindExtension,PathFindFileName(类似与basename中后面部分,获取得到整个文件名), PathFindNextComponent(获取得到除盘符外的所有文件名),PathFindOnPath,PathGetArgs,PathGetCharType,PathGetDriveNumber,PathIsDirectory,PathIsFileSpec(仅有文件名部分,不能够包括:和\符号),PathIsPrefix,PathIsRelative,PathIsRoot,PathIsSameRoot,PathIsUNC,PathIsUNCServer,PathIsUNCServerShare,PathIsContentType,PathIsURL,
PathMakePretty,PathMatchSpec,PathParseIconLocation,PathQuoteSpaces,PathRelativePathTo,PathRemoveArgs,PathRemoveBackslash,PathRemoveBlanks,
PathRemoveExtension,PathRemoveFileSpec,PathRenameExtension,PathSearchAndQualify,PathSetDlgItemPath,PathSkipRoot,PathStripPath,
PathStripToRoot,PathUnquoteSpaces,PathMakeSystemFolder,PathUnmakeSystemFolder,PathIsSystemFolder
常见的注册表处理函数有:
SHDeleteEmptyKey,SHDeleteKey, SHDeleteValue,SHGetValue,SHSetValue,SHQueryValueEx, SHEnumKeyEx,SHEnumValue,SHQueryInfoKey,
SHRegCreateUSKey,SHRegOpenUSKey,SHRegQueryUSValue,SHRegWriteUSValue,SHRegDeleteUSValue,SHRegDeleteEmptyUSKey,SHRegEnumUSKey,
SHRegEnumUSValue,SHRegQueryInfoUSKey,SHRegGetUSValue,SHRegSetUSValue,SHRegGetBoolUSValue,SHOpenRegStream,
其他函数
创建GDI帮助函数
SHCreateShellPalette
DLLGETVERSIONPROC指针,用来获取dll的版本号
和DllInstall原型定义
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine);
windows路径操作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 |
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)”。 |
================================================================================
BOOL PathFileExists(LPCTSTR lpszPath)
功能:检查文件/路径是否存在
LPTSTR PathFindFileName(LPCTSTR pPath)
功能:获得路径中的文件名
例如: PathFileFileName( “c:\\Program Files\\File.txt” ) = “File.txt”。
如果路径中不包含文件名,则返回值是最下面的目录名。
LPTSTR PathFindExtension(LPCTSTR pPath)
功能:获取路径或文件名中的文件扩展名
例如:PathFindExtension( “File.txt” ) = “.txt”
LPTSTR PathFindNextComponent(LPCTSTR pszPath)
例如:PathFindNextComponent( “c:\\Program Files\\Directory” ) = “Program Files\\
Directory”
PathFindNextComponent( “c:\\Program Files” ) = “Program Files”
BOOL PathFindOnPath( IN OUT LPTSTR pszFile , IN LPCTSTR * ppszOtherDirs)
功能:在指定的目录中寻找文件。
参数:
pszFile 要寻找的文件名,确保 pszFile 有足够的大小来容纳 MAX_PATH 个字符。如果能找到指定的文件,该参数将返回文件的全路径。
ppszOtherDirs 该参数是首先要寻找的目录列表,它可以为NULL,如果为NULL,函数将在系统目录,当前目录和由PATH设定的目录中查找。
LPTSTR PathGetArgs(LPCTSTR pszPath)
功能:从路径中分析参数
例如:LPTSTR pszParam = PathGetArgs( “notepad.exe c:\\temp.txt” )
pszParam 返回 “c:\\temp.txt”
int PathGetDriveNumber(LPCTSTR lpsz)
功能:从路径中分析盘符
返回值:成功返回 0 –25 ,代表(A – Z),失败返回 –1
BOOL PathIsContentType(LPCTSTR pszPath,LPCTSTR pszContentType)
功能:检查文件是否为指定的ContentType
例如:PathIsContentType( “hello.txt” , “text/plain” ) 返回TRUE
PathIsContentType( “hello.txt” , “image/gif” ) 返回FALSE
BOOL PathIsDirectory(LPCTSTR pszPath)
功能:检查路径是否为有效目录。注意路径不能包含文件名
BOOL PathIsFileSpec(LPCTSTR lpszPath)
功能:检查路径中是否带有 ‘:’ 和 ‘\’ 分隔符
BOOL PathIsHTMLFile(LPCTSTR pszFile)
功能:检查是否为HTML文件
BOOL PathIsPrefix(IN LPCTSTR pszPrefix,IN LPCTSTR pszPath)
功能:检查路径是否包含指定前缀,前缀如:”盘符:\\” 、“..\\” 、”.\\”
PathIsPrefix ( “c:\\” , “c:\\hello.txt” ) 返回 TRUE
BOOL PathIsRelative(LPCTSTR lpszPath)
功能:检查路径是否是相对路径