C/C++获取文件后缀名并且比较
以下这段是VC中过去文件后缀名的方法
CString GetSuffix(CString strFileName)
{
return strFileName.Right(strFileName.GetLength()-strFileName.ReverseFind('.')-1);
}
2。PathFindExtension
3。忽略大小写方法
CString::MakeUpper();全部转化为大写;
CString::MakeLower();全部转化为小写;
/////////////////////////////////////////////////////////////////////////
//
// PathFindExtension();函数的使用
// 作用:取得文件的后缀名
// 注意:头文件 shlwapi.h 包含库:shlwapi.lib
//
//
/////////////////////////////////////////////////////////////////////////
#include <tchar.h>
#include <iostream>
#include <Windows.h>
#include <shlwapi.h>
using namespace std;
#pragma comment(lib, "shlwapi.lib")
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR szEXEPath[2048];
LPTSTR pszExtension;
GetModuleFileName(NULL,szEXEPath,2048);
pszExtension = PathFindExtension(szEXEPath);
return 0;
}
比较文件后缀名的方法可以用_tcscmp()函数:例如if (_tcscmp(m_pszExtension, _T(".png"))== 0 ),比较获得的文件后缀名是否为.png
其实原来一直以为,C语言对于处理文件后缀名这种事是有点力不从心的(只能通过自己写一个小函数完成这种小需求),maybe C++可以有实现这种功能的STL或者类,但是因为本人对C++知之甚少,也就不在这里献丑了。
今日上网本来想搜一段别人写好的代码片段,修改修改拿来用的,不过偶然在csdn论坛上有人提到了一个名叫_splitpath的c函数,貌似可以获取一个文件完整路径的各个部分,当然也包括后缀名了。既然有标准文件名处理函数,岂有不用之理。这里,小弟便为大家详解一下这个函数,以后有用到类似需求的时候,也不用自己写了(毕竟自己写的函数难免存在些bug或是漏洞不是)。
_splitpath
需要的头文件是:<stdlib.h>
函数原型如下
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext);
其中包含5个参数,第一个是待处理的完整的文件名路径,例如:“c:\windows\myfile.txt”,当然这个文件名也可以不是那么完整,即使是"myfile.txt"这样的字符串也可以成功处理。
后面四个参数分别代表四个需要从原始文件路径中截取的字符串,有驱动器盘符(drive),中间的路径(dir),文件名(fname),和后缀名(ext)。
只要在这四个参数中传入对应的字符串指针,函数返回时即可获取对应截取的字符串,不想获取的可以直接填入NULL进行忽略,比如我只想截取文件的后缀名,那么这个函数可以如下调用:
_splitpath(path, NULL, NULL, NULL, ext);
其中ext必须是已经分配了内存空间的字符串指针,否则会出错(c语言的基本特性,我就不赘述了)
下面再附上一段完整的示例程序,供大家参考:
Example:
- /* MAKEPATH.C */
- #include <stdlib.h>
- #include <stdio.h>
- void main( void )
- {
- char path_buffer[_MAX_PATH];
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
- char fname[_MAX_FNAME];
- char ext[_MAX_EXT];
- _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
- printf( "Path created with _makepath: %s\n\n", path_buffer );
- _splitpath( path_buffer, drive, dir, fname, ext );
- printf( "Path extracted with _splitpath:\n" );
- printf( " Drive: %s\n", drive );
- printf( " Dir: %s\n", dir );
- printf( " Filename: %s\n", fname );
- printf( " Ext: %s\n", ext );
- }
OutPut:
- Path created with _makepath: c:\sample\crt\makepath.c
- Path extracted with _splitpath:
- Drive: c:
- Dir: \sample\crt\
- Filename: makepath
- Ext: .c
C/C++获取文件后缀名并且比较的更多相关文章
- [Java] 03 String获取文件后缀名,判断文件是否合法
package test.string; import java.util.Arrays; import java.util.List; public class GetFileType { priv ...
- PHP获取文件后缀名的三种方法
如下: <? PHP获取文件后缀名的几种方法1: function get_file_type($filename){ $type = substr($filename, strrpos($fi ...
- PHP获取文件后缀名
PHP获取文件后缀名是PHP学习者常见的一种操作,无论是在面试过程中还是PHP新手自学中.PHP获取文件后缀名都是很普遍的需要掌握的一个知识点. 下面我们就给大家总结介绍PHP获取文件扩展名也就是后缀 ...
- java 获取文件后缀名(文件类型)
java 获取文件后缀名(文件类型) CreateTime--2018年5月23日09:16:31 Author:Marydon // 获取文件名的后缀名(文件类型) String oldFile ...
- javascript获取文件后缀名
javascript获取文件后缀名:在需要验证文件格式的时候,首先就要获得文件的格式,下面是一个通过正则表达式获取文件后缀名的一个简单实例. function validate(){ var impo ...
- python应用-获取文件后缀名
def get_suffix(filename,has_dot=False): """ 获取文件后缀名 :param filename: 文件名 :param has_d ...
- VC获取文件后缀名
VC获取文件后缀名 2011-07-28 10:30:50| 分类: Visual C++ and O | 标签: |举报 |字号大中小 订阅 1. CString GetSuffix(C ...
- php 获取文件后缀名
$file_ext = strtolower(substr(strrchr($upload_file, '.'), 1)); strrchr:查找指定字符在字符串中的最后一次出现 string str ...
- input上传文件获取文件后缀名+select通过text选中option
1.input获取后缀名 var fileName = $("input[type='file']").val();//获取上传的文件(单个) var extName = file ...
随机推荐
- [转]Idea2016 使用Maven配置简单Web项目(受益比较多的一篇)
最近被同事一直吵着用Idea写Java,于是偷偷的去试用了一下Idea.确实不错,无论界面还是智能提醒都是蛮符合我的使用习惯,但是刚从Eclipse出来,使用Idea还是不太习惯的.所以这里写出来,供 ...
- Ajax+Jsp+servlet+json技术的使用
Ajax+Jsp+servlet+json技术的使用 在使用json的时候,记得必须导入如下几个.jar包,最好是手动复制.jar包只lib路径下,否则可能出现异常. commons-beanutil ...
- CI框架 -- URI 路由
一般情况下,一个 URL 字符串和它对应的控制器中类和方法是一一对应的关系. URL 中的每一段通常遵循下面的规则:example.com/class/function/id/ 但是有时候,你可能想改 ...
- font-awesome 使用方法
需要引入文件 font-awesome.css <link rel="stylesheet" href="{$yf_theme_path}public/font-a ...
- Objective-C语法之nonatomic和atomic之间的区别
atomic: 保证 setter/getter 这两个方法的一个原语操作.如果有多个线程同时调用 setter 的话,不会出现某一个线程执行 setter 全部语句之前,另一个线程开始执行 set ...
- 1. 自动化运维系列之Cobbler自动装机
preface 我们之前批量安装操作系统的时候都是采用pxe来安装,pxe也是通过网络安装操作系统的,但是PXE依赖于DHCP,HTTP/TFTP,kicstart等支持.安装流程如下所示: 对于上面 ...
- C# DataTable转实体 通用方法
public static T GetEntity<T>(DataTable table) where T : new() { T entity = new T(); foreach (D ...
- jsp+springmvc实现文件上传、图片上传和及时预览图片
1.多文件上传:http://blog.csdn.net/a1314517love/article/details/24183273 2.单文件上传的简单示例:http://blog.csdn.net ...
- QT3D场景快速绘制入门学习
在QT中实现3D绘制的方式: 1) 使用QT OpenGL模块(QOpenGLWidget等) 2) 使用QT 3D C++类(QEntity等) 3) 使用QT 3D QML类(Enti ...
- yum 安装nginx
1.下载一个rpm包 wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noar ...