[C/C++]_[判断文件名后缀是不是支持的格式最快的方案]

场景:

1. 已知道某库只支持某几种图片格式,png,jpg,gif,bmp,tif,jpeg.现在再加载文件时要判断文件后缀名是不是以上支持的格式。

2. 一般情况下是逐个判断是不是在所支持的列表里,但这样的做法既需要循环有需要多次判断.

解决方案:

1. 通过构造特定的字符串结构通过find找出来. --- 如果有速度更快的麻烦告诉我一下,没参考过开源代码中的实现,估计应该有.

";jpg;png;bmp;jpeg;gif;"

main.cpp

#include <iostream>
#include <algorithm>
#include <string.h>
#include <assert.h>

std::string GetFilePosfix(const char* path)
{
	char* pos = strrchr(path,'.');
	if(pos)
	{
		std::string str(pos+1);
		//1.转换为小写
		//http://blog.csdn.net/infoworld/article/details/29872869
		std::transform(str.begin(),str.end(),str.begin(),::tolower);
		return str;
	}
	return std::string();
}

bool IsSupportPos(const std::string& posfix,const std::string& support)
{
	std::string str(";");
	str.append(posfix).append(";");

	if(support.find(str)!=std::string::npos)
	{
		return true;
	}
	return false;
}

int main(int argc, char const *argv[])
{
	const char* POSFIX = ";jpg;png;bmp;jpeg;gif;";
	const char* path = "E:\\picture\\11.ggIf";

	std::string posfix = GetFilePosfix(path);
	std::cout << posfix << std::endl;
	assert(!IsSupportPos(posfix,POSFIX));

	path = "E:\\picture\\11.gIf";
	posfix = GetFilePosfix(path);
	std::cout << posfix << std::endl;
	assert(IsSupportPos(posfix,POSFIX));

	return 0;
}
时间: 2024-10-19 07:44:12

[C/C++]_[判断文件名后缀是不是支持的格式最快的方案]的相关文章

JavaScript根据文件名后缀判断是否图片文件

//JavaScript根据文件名后缀判断是否图片文件 //图片文件的后缀名 var imgExt = new Array(".png",".jpg",".jpeg",".bmp",".gif"); //获取文件名后缀名 String.prototype.extension = function(){ var ext = null; var name = this.toLowerCase(); var i

彻底解决_OBJC_CLASS_$_某文件名&quot;, referenced from:问题(转)

最近在使用静态库时,总是出现这个问题.下面总结一下我得解决方法: 1. .m文件没有导入   在Build Phases里的Compile Sources 中添加报错的文件 2. .framework文件没有导入静态库编译时往往需要一些库的支持,查看你是否有没有导入的库文件同样是在Build Phases里的Link Binary With Libraries中添加 3. 重复编译,可能你之前复制过两个地方,在这里添加过两次,删除时系统没有默认删除编译引用地址在Build Settings里搜索

MVC4 路由参数带点 文件名后缀导致错误

错误描述 最近在研究office在线预览,用到mvc4  apicontroller 需要传参是文件名,如test.docx导致错误"指定的目录或文件在 Web 服务器上不存在", 请求的路径如:api/wopi/files/test.docx?access_token=access_token.如下截图: 项目中路由配置: public static class WebApiConfig { public static void Register(HttpConfiguration

OpenGrok添加根据文件名后缀进行查询过滤的功能

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">OpenGrok默认会将*.o *.so这些二进制文件也加入索引(其实没什么坏处),如果想在查询时过滤这些文件,怎么做?</span> 要点: https://github.com/OpenGrok/OpenGrok/blob/master/src/org/opensolar

2.23——2.25find命令(上中下);2.26 文件名后缀

2.23 find命令(上) 快捷键: Ctrl + l  :清屏 Ctrl + d :退出终端(相当于执行了:exit 或logout) Ctrl + c : 强制中断 Ctrl + u : 在命令输入行,删除光标前的字符串 Ctrl + e :  光标移到末尾 Ctrl + a :  光标移到开始 which :搜索命令文件(从echo $PATH环境变量下的目录查找) find :搜索文件 1. find 精准搜索:find 搜索路径 -name "精准关键词" [[email 

十、find命令;文件名后缀

一.find命令 格式:find [路径] [参数]. 常用参数: -atime +n/-n:表示访问或执行时间大于或小于n天的文件. -ctime +n/-n:表示写入.更改iNode属性(如更改所有者.权限或者链接)的时间大于或小于n天的文件. -mtime +n/-n:表示写入时间大于或小于n天的文件,该参数用得很多. 示例命令: # find /tmp4_6/ -mtime -1 上例中,-mtime -1表示,mtime在1天之内的文件,单位是天.而-mtime +10表示mtime在

上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?

今天群里有人聊图片上传,简单说下自己的经验 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那么如果我在传路径的时候,前面加了一个../呢,这样这种服务器端的限制就跳过了.(DJ音乐站基本上都有这个问题,以及用某编辑器的同志) 1.常用方法:这种就是根据后缀判断是否是图片文件,需要注意的是这种格式:文件:1.asp;.jpg  1.asp%01.jpg  目录: 1.jpg/1.asp 1.jpg/1.

javascript如何判断当前浏览器是否支持cookie

javascript如何判断当前浏览器是否支持cookie:浏览器在默认状态下都是支持cookie的,但是也可以人为的禁用.代码如下: function check() { if(window.navigator.cookieEnabled) { return true; } else { alert("浏览器已经禁用cookie"); return false; } } 上面的函数可以实现验证cookie的效果.cookieEnabled属性可以参阅Navigator对象的cooki

FAT32根据文件目录项判断文件名大小写

FAT32根据文件目录项判断文件名大小写的方法(仅限8.3命名规则): 文件目录项0CH字节的值:      1. 此值为18H时,文件名和扩展名都小写.      2. 此值为10H时,文件名大写而扩展名小写.      3. 此值为08H时,文件名小写而扩展名大写.      4. 此值为00H时,文件名和扩展名都大写. 如下图: