原文网址:http://www.cnblogs.com/lisuyun/p/3399232.html

以下这段是VC中过去文件后缀名的方法

1。
CString GetSuffix(CString strFileName) 

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

m_mp3filename = mp3_dlg.GetPathName();
o_wavFilename = m_mp3filename.Left(m_mp3filename.ReverseFind('.'))+".wav";
o_arguFilename = m_mp3filename.Left(m_mp3filename.ReverseFind('.'))+".bin";

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:\windows\myfile.txt”,当然这个文件名也可以不是那么完整,即使是"myfile.txt"这样的字符串也可以成功处理。

后面四个参数分别代表四个需要从原始文件路径中截取的字符串,有驱动器盘符(drive),中间的路径(dir),文件名(fname),和后缀名(ext)。

只要在这四个参数中传入对应的字符串指针,函数返回时即可获取对应截取的字符串,不想获取的可以直接填入NULL进行忽略,比如我只想截取文件的后缀名,那么这个函数可以如下调用:

_splitpath(path, NULL, NULL, NULL, ext);

其中ext必须是已经分配了内存空间的字符串指针,否则会出错(c语言的基本特性,我就不赘述了)

下面再附上一段完整的示例程序,供大家参考:

Example:

  1. /* MAKEPATH.C */
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. void main( void )
  5. {
  6. char path_buffer[_MAX_PATH];
  7. char drive[_MAX_DRIVE];
  8. char dir[_MAX_DIR];
  9. char fname[_MAX_FNAME];
  10. char ext[_MAX_EXT];
  11. _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
  12. printf( "Path created with _makepath: %s\n\n", path_buffer );
  13. _splitpath( path_buffer, drive, dir, fname, ext );
  14. printf( "Path extracted with _splitpath:\n" );
  15. printf( "  Drive: %s\n", drive );
  16. printf( "  Dir: %s\n", dir );
  17. printf( "  Filename: %s\n", fname );
  18. printf( "  Ext: %s\n", ext );
  19. }

OutPut:

  1. Path created with _makepath: c:\sample\crt\makepath.c
  2. Path extracted with _splitpath:
  3. Drive: c:
  4. Dir: \sample\crt\
  5. Filename: makepath
  6. Ext: .c

【转】MFC String处理的更多相关文章

  1. MFC string char cstring 类型转换

    在Unicode环境下用以下转换: CString z_strCurtTime = _T(""); // 获取当前时间 CTime z_tCurTime = CTime::GetC ...

  2. ATL and MFC String Conversion Macros

    ATL 7.0介绍了一些新的转换类和宏,为现有的宏提供了重要的改进.新的字符串转换类和名称宏的形式是:C 源类型 2[C] 目标类型[EX]其中:•源类型和目标类型描述如下表.• [C]是目标类型必须 ...

  3. Convert CString to ANSI string in UNICODE projects

    Convert CString to ANSI string in UNICODE projects Quick Answer: use an intermediate CStringA. Norma ...

  4. Windows Mobile和Wince(Windows Embedded CE)的字符集问题

    背景 开发过Windows Mobile和Wince(Windows Embedded CE)的开发者,特别是Native C++开发者,或多或少都遇到过ANSI字符集和Unicode字符集的转换问题 ...

  5. VC中的字符串转换宏

              ATL7.0引入了几个新的转换类和宏,现有的宏提供了显着的改善.新的字符串转换类和宏的名称,采取的形式如下: C SourceType [C]DestinationType[EX] ...

  6. mfc中CString转化为string的方法

    LL(1)分析法实验的mfc做到最后因为CString转化为string的问题卡了一个多小时,也是惨,网上各种方法找过都不行.幸亏最后还是找到几行代码搞定了.特此mark一下. USES_CONVER ...

  7. MFC常见问题以及解决方法(2)_Cstring和string互相转换

    MFC默认编码是unicode(自己改成多字符集是不行的),对话框中对字符串的处理都是宽字符,而且添加变量会默认是CString类型,当你代码中想用string但又遇到必须转为CString的情况,就 ...

  8. MFC中char*,string和CString之间的转换

    MFC中char*,string和CString之间的转换 一.    将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如:  CString theString( &q ...

  9. 实战c++中的string系列--std::string与MFC中CString的转换

    搞过MFC的人都知道cstring,给我们提供了非常多便利的方法. CString 是一种非常实用的数据类型. 它们非常大程度上简化了MFC中的很多操作,使得MFC在做字符串操作的时候方便了非常多.无 ...

随机推荐

  1. WPF usercontrol 自定义依赖属性

    1.依赖属性不同意一般属性,一般属性主要定义在对象中,而依赖属性是存在一个特殊的依赖属性表中.2.当我们触发改变值时,需要通过SetValue这种方式进行触发. UserControl1.xaml: ...

  2. 数据库常见的三种join方式

    数据库常见的join方式有三种:inner join, left outter join, right outter join(还有一种full join,因不常用,本文不讨论).这三种连接方式都是将 ...

  3. Gym 101243E Cupcakes

    http://codeforces.com/gym/101243/attachments 题意: 有n个人,桌子上有k的蛋糕,每个人都有一个值val,表示每次轮到他吃蛋糕时,他可以吃1~val的蛋糕量 ...

  4. POJ 2112 Optimal Milking(二分+最大流)

    http://poj.org/problem?id=2112 题意: 现在有K台挤奶器和C头奶牛,奶牛和挤奶器之间有距离,每台挤奶器每天最多为M头奶挤奶,现在要安排路程,使得C头奶牛所走的路程中的最大 ...

  5. Tornado源码分析 --- Cookie和XSRF机制

    Cookie和Session的理解: 具体Cookie的介绍,可以参考:HTTP Cookie详解 可以先查看之前的一篇文章:Tornado的Cookie过期问题 XSRF跨域请求伪造(Cross-S ...

  6. 多目标跟踪方法 NOMT 学习与总结

    多目标跟踪方法 NOMT 学习与总结 ALFD NOMT MTT 读 'W. Choi, Near-Online Multi-target Tracking with Aggregated Local ...

  7. Xcode6中手动添加Precompile Prefix Header

    Xcode5中创建一个工程的时候,系统会自动创建一个以以工程名为名字的pch(Precompile Prefix Header)文件,开发的过程中可以将广泛使用的头文件以及宏包含在该文件下,编译器就会 ...

  8. java读取PHP接口数据的实现方法(四)

    PHP文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3 ...

  9. Eclipse CDT 配置C /C ++ 标准库 (UBUNTU 12 )

    http://blog.csdn.net/wudiwo/article/details/7682320

  10. IIS上部署DotNet Core程序

    1.安装托管捆绑包 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.1 ...