【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀
来源:互联网 发布:玩具战争防御塔数据 编辑:程序博客网 时间:2024/05/17 22:42
工作后比较忙,没大块的时间来酝酿博客的写作,所以随时记点笔记,一来方便自己查阅,二来也督促自己学习和总结。如果能对大家有所帮助,就更加开心了。
根据文件的后缀名来判断文件类型是个相当常用的方法,要先写一个后缀名数组,然后遍历这个数组来查找吗?不用,Windows系统已经提供了一个相当好用的API帮助大家处理这个问题了——PathFindSuffixArray,下面来看看这个函数的原型及参数介绍:
Syntax
LPCTSTR PathFindSuffixArray(
LPCTSTR pszPath,
const LPCTSTR *apszSuffix,
int iArraySize
);
Parameters
pszPath [in]
A pointer to a null-terminated string of maximum length MAX_PATH that contains the file name to be tested. A full path can also be used.
apszSuffix [in]
An array of size iArraySize that contains the suffixes to be tested for.
iArraySize [in]
The number of elements in apszSuffix.
注意:最好先统一大小写后再使用这个函数,不然.JPG与.jpg会判断为不相同。
下面示范使用这个函数来判断一个文件是否是音乐,视频,图片,电子书。完整的代码如下:
// 【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否包含指定的后缀// http://blog.csdn.net/morewindows/article/details/17078633#include <stdio.h>#include <windows.h>#include <string>#include <shlwapi.h>#pragma comment(lib, "shlwapi.lib")const LPCWSTR MUSIC_FILE_EXT_NAME[] = {L".mp3", L".wma", L".aac", L".ogg", L".wav", L".m4a", L".amr", L".ape", L".cue", L".flac", L".wav"};const LPCWSTR VIDEO_FILE_EXT_NAME[] = {L".mp4", L".avi", L".3gp", L".mkv", L".wmv", L".rm", L".rmvb", L".asf", L".f4v", L".flv", L".m4v", L".mpg", L".mpeg", L".mov"};const LPCWSTR IMAGE_FILE_EXT_NAME[] = {L".jpg", L".jpeg", L".png", L".bmp", L".gif"};const LPCWSTR EBOOK_FILE_EXT_NAME[] = {L".txt", L".epub", L".pdf"};struct ClassifyCriteria { const LPCWSTR* suffix_array; int suffix_array_size; LPCWSTR classify_name;};ClassifyCriteria classify_criteria[] = { {MUSIC_FILE_EXT_NAME, ARRAYSIZE(MUSIC_FILE_EXT_NAME), L"music"}, {VIDEO_FILE_EXT_NAME, ARRAYSIZE(VIDEO_FILE_EXT_NAME), L"video"}, {IMAGE_FILE_EXT_NAME, ARRAYSIZE(IMAGE_FILE_EXT_NAME), L"image"}, {EBOOK_FILE_EXT_NAME, ARRAYSIZE(EBOOK_FILE_EXT_NAME), L"ebook"}};LPCWSTR ClassifyFile(LPCWSTR file_name) { static const LPCWSTR DEFAULT_SDCARD_DIR_NAME = L"oter file type"; // 先转成小写 WCHAR name[MAX_PATH]; StrCpyW(name, file_name); CharLowerBuffW(name, lstrlenW(name)); // 再判断后缀 for (size_t i = 0; i < ARRAYSIZE(classify_criteria); i++) if (PathFindSuffixArrayW(name, classify_criteria[i].suffix_array, classify_criteria[i].suffix_array_size) != NULL) return classify_criteria[i].classify_name; return DEFAULT_SDCARD_DIR_NAME;}int main(){ printf(" 【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否包含指定的后缀\n"); printf(" - http://blog.csdn.net/morewindows/article/details/17078633 -\n"); printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); LPCWSTR path = L"C:\\test\\test2\\1.JPG"; printf("路径:%ls\n类型为:%ls\n", path, ClassifyFile(path)); return 0;}运行结果如图所示:
地址:http://blog.csdn.net/morewindows/article/details/17078633 转载请标明出处,谢谢。
欢迎关注微博:http://weibo.com/MoreWindows
- 【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀
- 【MoreWindows工作笔记7】PathIsPrefix 判断路径的包含关系
- 【MoreWindows工作笔记6】PathCommonPrefix 路径公共前缀
- 【MoreWindows工作笔记5】StrFormatByteSize64 高端大气的显示文件大小
- 【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容
- 【MoreWindows工作笔记11】EnumClipboardFormats 剪切板内容的数据格式
- 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
- 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
- 【MoreWindows工作笔记2】 查看当前系统使用的字符集 GetSystemDefaultLocaleName
- 【MoreWindows工作笔记10】OleGetClipboard 访问剪切板上的文件信息
- 【MoreWindows工作笔记3】 使用cout/pintf输出16进制,8进制,2进制数据
- 判断给定的图是否是有向无环图
- 【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径
- 给定一个8*8的方格子,A点到B点的最短路径有多少条?
- 【MoreWindows工作笔记1】 C/C++ 输出宽字符 printf + %ls or wcout
- 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo
- Leetcode:112. Path Sum (求Tree中是否存在路径的和等于给定值)
- 脚本实现查找给定后缀的文件
- javascript技巧整理(3)
- 【MoreWindows工作笔记6】PathCommonPrefix 路径公共前缀
- 数组大折腾。(二)
- 【MoreWindows工作笔记7】PathIsPrefix 判断路径的包含关系
- oracle学习之bulk collect用法
- 【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀
- 函数指针作为函数参数
- 常量折叠的理解
- C++ 虚函数表解析
- Linux网络编程--TCP的套接字通信学习笔记
- 冒个泡
- sgu 525 Revolutionary Roads
- Android am命令
- 持续集成与测试自动化