【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀
作者:互联网
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
工作后比较忙,没大块的时间来酝酿博客的写作,所以随时记点笔记,一来方便自己查阅,二来也督促自己学习和总结。如果能对大家有所帮助,就更加开心了。
根据文件的后缀名来判断文件类型是个相当常用的方法,要先写一个后缀名数组,然后遍历这个数组来查找吗?不用,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
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
标签:const,NAME,后缀,MoreWindows,LPCWSTR,EXT,FILE,PathFindSuffixArrayW,name 来源: https://www.cnblogs.com/heishanglaoyao/p/10489039.html