vc获取文件后缀名

我们经常会遇到需要获取文件名后缀的情形,例如:需要针对某路径下的所有文件的不同类型进行不同的处理,这是我们需要获取每个文件的后缀名。通常有以下做法:

①char * strrchr ( char * str, int character );查找字符在指定字符串中从后面开始的第一次出现的位置,如果成功,则返回指向该位置的指针,如果失败,则返回 false。

TCHAR fileName[] = "c:/test//张信哲--白月光.mp3";
TCHAR* extention;
extention = strrchr(fileName , '.') + 1;

既然说到这里,那就顺便提一下char * strchr ( char * str, int character )吧。与strrchr()相对应它查找字符串中首次出现指定字符的位置。

这是一种很常见的做法,很多人都是这么做的,不过也许会有别的方法。

②_splitpath,_wsplitpath

复制代码
#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 );
}
复制代码

这里提到了另外一个函数makepath,以下是程序的执行结果,看完之后,我想的_makepath和_splitpath用法大家心中自当了然了

Path extracted with _splitpath:
  Drive: c:
  Dir: \sample\crt\
  Filename: makepath
  Ext: .c

③在MFC中,因为有了类CString的存在,使得很多事情表面上变得简单了,记住,是“表面上”。

CString GetSuffix(CString strFileName)
{
        return strFileName.Right(strFileName.GetLength()-strFileName.ReverseFind('.')-1);
}

至于为什么要说表面上,大家翻阅下CString类的源代码就了然了。

④或许大家觉得还是不够直截了当,要是能像360那样一键搞定就欧了该多好,那么这个函数也许能满足你——PathFindExtension()。

复制代码
#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;
}
复制代码

⑤当然还有更高端的选手,就像这样:

char *FileName;
char *p=FileName;
   
while(*p) p++;
while(*p!='.') p--;
p++;

相当高端有木有!!!

目前我用过的方法就是以上这些了,当然还有别的方法,大同小异了,非要追根溯源,那就要用汇编来说一说了,还是算了吧,大家都不容易,何苦如此为难自己。

上面的五种方法,不能说谁好谁坏,就像打DOTA吧,有的人求稳,有的人爱秀操作,有的人特JB猥琐,有的人就是TM喜欢卖骚……开心就好嘛,只要能最终得到后缀名,哪一种都OK,只是要在合适的地方选择合适的方法。

本人比较倾向于第二种_splitpath,因为我觉得我们经常忽视了stdlib.h里面的函数。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值