【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀

原创 2013年12月16日 13:08:27

工作后比较忙,没大块的时间来酝酿博客的写作,所以随时记点笔记,一来方便自己查阅,二来也督促自己学习和总结。如果能对大家有所帮助,就更加开心了大笑

根据文件的后缀名来判断文件类型是个相当常用的方法,要先写一个后缀名数组,然后遍历这个数组来查找吗?不用,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  



版权声明:本文为博主原创文章,未经博主允许不得转载。

【白话经典算法系列之十六】“基数排序”之数组中缺失的数字

首先看看题目要求: 给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数。比如[1,2,0]返回3,[3,4,-1,1]返回2,[1, 5, 3, 4, 2]返回6,[100, 3, 2...

【MoreWindows工作笔记6】PathCommonPrefix 路径公共前缀

【MoreWindows工作笔记6】PathCommonPrefix 路径公共前缀 路径的公共前缀不同于字符串的公共前缀。本篇介绍如何用Windows系统提供的API函数——PathCommonPre...

【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板

【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板 很多程序会监视剪贴板,比如迅雷,这样当你复制一个迅雷下载链接时,迅雷就可以自动启动并创建一个新的下载任务。下面我们就...

【MoreWindows工作笔记2】 查看当前系统使用的字符集 GetSystemDefaultLocaleName

查看当前系统使用的字符集可以使用GetSystemDefaultLCID() + GetSystemDefaultLocaleName()...

【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容

【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容 本文将示范如果通过OLE方式从剪贴板上获取数据,如果该数据是文本内容,则打印该文本内容。...

【MoreWindows工作笔记11】EnumClipboardFormats 剪切板内容的数据格式

【MoreWindows工作笔记11】EnumClipboardFormats 剪切板内容的数据格式 本文将输出剪贴板上的数据地址,数据大小,对文本类型的数据如何直接输出。...

【MoreWindows工作笔记10】OleGetClipboard 访问剪切板上的文件信息

【MoreWindows工作笔记10】OleGetClipboard 访问剪切板上的文件信息 当我们复制文件时,会将文件的信息存储在剪贴板中,这个文件信息并不是文件路径的字符串。而是HDROP类型,本...

【MoreWindows工作笔记1】 C/C++ 输出宽字符 printf + %ls or wcout

工作后比较忙,没大块的时间来酝酿写博客,所以随时记点笔记,一来方便自己查阅,二来也督促自己学习和总结。如果能对大家有所帮助,就更加开心了。  在C/C++中输出宽字符可以使用printf + %ls ...

《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果

/** * 中缀表达式转换成后缀表达式: 从输入(中缀表达式)中读取的字符,规则: 操作数: 写至输出 左括号: 推其入栈 右括号: 栈非空时重复以下步骤--> * 若项不为(,则写至输出; 若项...

算法系列笔记8(有关图的算法二—最短路径问题)

图的最短路径问题主要分为两类,单源最短路径问题和全对最短路径问题。单源最短路径问题指给点单个源点,求其到所有其它顶点之间的最短距离。而全对最短路径问题指所有顶点之间的最短路劲问题。此外对于单对最短路径...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀
举报原因:
原因补充:

(最多只允许输入30个字)