CC++获取⽂件后缀名并且⽐较
以下这段是VC中过去⽂件后缀名的⽅法
1。
CString GetSuffix(CString strFileName)
{
return strFileName.Right(strFileName.GetLength()-strFileName.ReverseFind('.')-1);
}
2。PathFindExtension
3。忽略⼤⼩写⽅法
CString::MakeUpper();全部转化为⼤写;
CString::MakeLower();全部转化为⼩写;
取得⽂件的类型 PathFindExtension()
/////////////////////////////////////////////////////////////////////////
//
//    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:\”,当然这个⽂件名也可以不是那么完整,即使是""这样的字符串也可以成功处理。
后⾯四个参数分别代表四个需要从原始⽂件路径中截取的字符串,有驱动器盘符(drive),中间的路径(dir),⽂件名(fname),和后缀名(ext)。
只要在这四个参数中传⼊对应的字符串指针,函数返回时即可获取对应截取的字符串,不想获取的可以直接填⼊NULL进⾏忽略,⽐如我只想截取⽂件的后缀名,那么这个函数可以如下调⽤:
_splitpath(path, NULL, NULL, NULL, ext);
其中ext必须是已经分配了内存空间的字符串指针,否则会出错(c语⾔的基本特性,我就不赘述了)
下⾯再附上⼀段完整的⽰例程序,供⼤家参考:
Example:
[cpp]
1. /* MAKEPATH.C */
2.
3. #include <stdlib.h>
4. #include <stdio.h>
5.
6. void main( void )
7. {
8.    char path_buffer[_MAX_PATH];
9.    char drive[_MAX_DRIVE];
10.    char dir[_MAX_DIR];
11.    char fname[_MAX_FNAME];
12.    char ext[_MAX_EXT];
13.
14.    _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
15.    printf( "Path created with _makepath: %s\n\n", path_buffer );
16.    _splitpath( path_buffer, drive, dir, fname, ext );
17.    printf( "Path extracted with _splitpath:\n" );
18.    printf( "  Drive: %s\n", drive );
19.    printf( "  Dir: %s\n", dir );
20.    printf( "  Filename: %s\n", fname );
21.    printf( "  Ext: %s\n", ext );
22. }
OutPut:
c 字符串截取
[cpp]
1. Path created with _makepath: c:\sample\crt\makepath.c
2.
3. Path extracted with _splitpath:
4.  Drive: c:
5.  Dir: \sample\crt\
6.  Filename: makepath
7.  Ext: .c

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。