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

保姆级教程:2026版Windows电脑换新,微信QQ聊天记录无损搬家(附路径修改避坑指南) 本文提供2026版Windows电脑换新时微信QQ聊天记录无损迁移的保姆级教程,涵盖最新版微信/QQ的存储路径修改和避坑指南。通过详细步骤和实战技巧,确保数据迁移过程中不丢失任何珍贵对话记录和文件,特别适合需要保留完整聊天记录的用户。 阅读详情

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

根据文件的后缀名来判断文件类型是个相当常用的方法,要先写一个后缀名数组,然后遍历这个数组来查找吗?不用,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.youkuaiyun.com/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.youkuaiyun.com/morewindows/article/details/17078633 -\n");    
  printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n");  
  LPCWSTR path = L"C:\\test\\test2\\1.JPG";
  printf("路径:%ls\n类型为:%ls\n", path, ClassifyFile(path));
  return 0;
}
运行结果如图所示:



地址:http://blog.youkuaiyun.com/morewindows/article/details/17078633  转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows  



【笔记篇】Davinci Configurator EcuM模块 autosar ecum模块简介 阅读详情

相关推荐

CANoe信号波形分析保姆级教程:Graphic窗口从配置到实战避坑

本文详细解析了CANoe的Graphic窗口在信号波形分析中的高效配置与实战应用技巧。从信号显示模式选择、测量光标进阶操作到信号分组策略,提供工程化解决方案,帮助工程师快速定位总线信号异常,提升汽车电子开发与测试效率。

weixin_29279047的博客 265

整理了一些windows上的路径操作函数

<br />自己整理了一些windows上的路径操作函数,使用这些函数操作路径将非常方便。<br /> <br />路径截断与合并函数<br /> <br /> <br /> <br />PathRemoveArgs<br />去除路径的参数<br />PathRemoveBackslash<br />去除路径最后的反斜杠“/”<br />PathAddBackslash<br /> 在路径最后加上反斜杠“/”<br />PathRemoveBlanks<br />去除路径前后的空格<br />PathAd

海风鸥 - 编程技术交流 5298

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 648

根据后缀树得出后缀数组

后缀数组(suffix array)是字符串S的所有后缀按照一定顺序(通常是字典顺序)排列后得出的数组,数组中每个元素的值等于该后缀的起始下标。要根据后缀树得出后缀数组,只需遍历所有的叶子结点(按照从左到右的顺序依次访问每个叶子结点),因为每一个叶子结点对应一个后缀,它的起始下标

ljsspace的专栏 1449

c#.net使用正则表达式验证文本中是否包含手机号码或电话号码?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; namespace RegularPhoneApp { class Program

码农 3584

如何使用apifox打包测试用例生成测试套件自动化执行

使用apifox打包测试用例生成测试套件自动化执行

weixin_55613512的博客 2886

Linux 技巧: Bash 参数和参数扩展

级 别: 中级 Ian Shields, 高级程序员, IBM  2007 年 7 月 30 日 您是否 有时想知道如何对脚本使用参数,以及如何将参数传递给内部函数或其他脚本?是否需要对参数或选项做一些简单的有效性测试?或者对参数字符串执行一些简单的 析取和替换操作?本文将向您介绍参数的用法和 bash shell 中的各种参数扩展。 现在,很多 Linux? 和 UN

__清__风__ 1205

SDM量化噪声等效到PLL输出的传递函数推导

在历年文章或书本中少见SDM量化噪声等效到PLL输出的传递函数推导。需了解SDM量化噪声的本质,配合欧拉方程简化,并将Z域转化成S域。最终结合断环处等效到PLL输出的传递函数,方可完成。

u010486560的博客 1406

后缀数组(suffix array)详解

写在前面 在字符串处理当中,后缀树和后缀数组都是非常有力的工具。 其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料。 其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现, 能够实现后缀树的很多功能而时间复杂度也不太逊色,并且,它比后缀树所占用的空间小很多。 可以说,在信息学竞赛中后缀数组比后缀树要更为实用! 因此在本文中笔者想介绍一下后缀数组的基本概念、构造...

weixin_34198762的博客 1022

指纹浏览器 WebGPU:新一代图形指纹的检测趋势与提前防御

指纹浏览器与风控系统对抗已升级至硬件层面。传统基于WebGL的API拦截和像素噪声技术,在WebGPU时代因架构变革而失效。WebGPU通过Compute Shader直接测量GPU物理算力,暴露了软件模拟的致命缺陷。防御需转向真实GPU硬件直通和虚拟化技术,如vGPU分割算力并伪装特征,以应对风控系统对硬件拓扑和浮点精度的检测。唯有基于物理算力的拟态,才能抵御新一代图形指纹的降维打击。

数据知道的博客 216

别再盯着那 100 条数据了,RAP OData 分页机制到底在保护什么

摘要: SAP BTP ABAP Environment 的 OData 服务默认采用分页保护机制,未指定 $top 时仅返回100条数据并附带下一页链接。这种设计旨在防止资源滥用,而非服务故障。客户端应遵循OData协议规范,直接使用服务端返回的 next link 进行分页请求,而非自行构造URL。当指定 $top 参数时,若数值超过5000仍会被强制分页。该机制在SAPUI5控件中被自动处理,但自定义客户端需主动实现分页逻辑。对于自定义实体(Custom Entity),开发者需在Query Prov

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 859

suffix array

#include <stdio.h> #include <string.h> char num[4001]; int suffix[4001]; int mark[4001];int comparel(char* a, char*b) { int i; for(i = 0; a[i] !=0 && b[i] != 0; i++) { if(a[i] != b[

SYLAS_LINUX的博客 825

R语言使用survminer包的ggcompetingrisks函数可视化竞争风险的累积事件曲线、使用可视化对象的mapping属性自定义修改、配置颜色分组及线条类型

R语言使用survminer包的ggcompetingrisks函数可视化竞争风险的累积事件曲线、使用可视化对象的mapping属性自定义修改、配置颜色分组及线条类型

data+scenario+science+insight 1379

Suffix_Array模板重置版

#include <cstdio> #include <iostream> #include <string> #include <algorithm>using namespace std;const int maxn=int(1e6)+10; int n,k; int rnk[maxn],tmp[maxn]; int sa[maxn]; int lcp[maxn];bool cmp(int a,

yashem66 460

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

后缀数组(SuffixArray) 学习笔记

后缀数组     前面有介绍过后缀树,后缀树对于我们针对某些字符串的处理使得如鱼得水,美中不足的是后缀树的代码实现复杂,只能让很多人望而却步。这次我们来介绍后缀树组:一个处理字符串的有力工具,也是一个后缀树的精美替代品,同样可以方便解决很多字符串问题。它比后缀树更加容易实现编码,也可以在不损失效率的情况下实现很多后缀树的功能,占用内存也比后缀树小很多,尤其是在模式匹配数据规模庞大的操作中实用性很

尜尜君的小世界 3367

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

后缀数组-sa-SuffixArray学(复)习小记

功能 用O(NlogN)O(NlogN)O(N log N)的时间将某个串的后缀排序,并利用这个做神奇的东西。 思想(倍增法) sa[i],第i小后缀的起点 rk[i],以i为起点的后缀排第几。 注意要保证在排序过程中,内容相同则rk相同 假设我们已经将每个后缀的前k个字符排序,然后显然可以利用k个字符的排名去得到k*2个字符的排名,相当于多增加一个关键字。(就是倍增的思想) 其...

一位蒟蒻的小博客 1043

后缀数组测试1

/* *********************************************** Author :xianxingwuguan Created Time :2014/1/18 23:44:36 File Name :A.cpp ************************************************ */ #pragma comment(linker,

_rabbit的专栏 902

Suffix Array 后缀数组

后缀数组 顾名思义,SuffixArray(以下有时简称SA) 和字符串的后缀有关。 后缀:字符串中某个位置一直到结尾的子串。(SA中讨论包括了原串和空串),所以共有len+1个后缀。 后缀数组: 字符串的所有后缀组成的按字典序从小到大排好的数组。由于SA中记录的都是字符串的后缀,所以SA只需要记录其表示的后缀的起始位置。 由于比较字典序是O(n)的,所以暴力算法的复杂度将

xuelanghu407 3289

【知识总结】后缀数组(Suffix_Array)

又是一个学了n遍还没学会的算法…… 后缀数组是一种常用的处理字符串问题的数据结构,主要由\(sa\)和\(rank\)两个数组组成。以下给出一些定义: \(str\)表示处理的字符串,长度为\(len\)。(下标从\(0\)开始) \([i,j)\)表示\(str\)从\(i\)到\(j - 1\)的字串。 后缀\(i\)表示子串\([i,len)\),以字典序排序。 \(sa[i]\)表示排名为...

weixin_30826761的博客 336

suffix_array(后缀数组)

#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std;vector<int> grade; vector<int> sa; vector<int> tempg; int k; string s;bool cmpsa(int a, int b) { i

wdcxc的专栏 743

suffix_array(后缀数组) 学习笔记

没学会正常做法 写了一个链表实现的 双关键字 统计排序,常数差不多大 #include &lt;bits/stdc++.h&gt; #define N 200100 using namespace std; int n, SA[N], rnk[N], height[N]; char S[N]; inline void get_SA() { static int x[N], y[...

hz 的博客 518

intent-filter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」

一、定义   scheme, host, port, path, pathPrefix, pathPattern 是用来匹配 Intent 中的 Data Uri 的。具体规则如下:     scheme://host:port/path or pathPrefix or pathPattern   这里需要注意的是这里的 scheme 不是 schema,也许你记得

手指乐 5352

后缀数组(Suffix Array)学(复)习小记

前言后缀数组是个十分有用的东西,上一年就学过,结果又还给pdf了,如今再看一遍,好懂很多。 怎么说呢,get了height后,SA能解决很大一部分字符串问题。 后缀是什么大家都知道··· sa[i]表示第i小(大)后缀是哪里开头的后缀 rank[j]是是第j个后缀的排名弄出SA数组(DC3好恶心,学倍增实现!) 后缀数组关键就是要弄出后缀数组嘛。 我们现在有一个字符串r,好我们把它弄成i

ZLTJohn的博客 1695

[ACM模板]SuffixArray后缀数组

#include #include #include #include using namespace std; class SUFFIXARRAY { #define SLEN 201000 /* 直接用函数.solve(char s[],int charSetSize=128),s[]下标从0开始。 charSetSize:表示0<=s[0]..s[n-1]<charSet

vcvycy的专栏 491
上一篇: 【MoreWindows工作笔记7】PathIsPrefix 判断路径的包含关系
下一篇: MoreWindows博客目录(微软最有价值专家,原创技术文章152篇)
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值