【转】MFC String处理

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

C/C++获取文件后缀名并且比较

以下这段是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语言获取文件后缀名的技巧

语言cpathbufferextnull

其实原来一直以为,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
时间: 2024-11-13 14:26:31

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

ATL and MFC String Conversion Macros

ATL 7.0介绍了一些新的转换类和宏,为现有的宏提供了重要的改进.新的字符串转换类和名称宏的形式是:C 源类型 2[C] 目标类型[EX]其中:•源类型和目标类型描述如下表.• [C]是目标类型必须是只读的.•[EX]是缓冲器的初始大小必须被指定为一个模板参数. 源类型/目标类型  描述 A  ANSI字符串 W  Unicode字符串 T  通用字符串(如果定义了_UNICODE)则等同于W,否则等同于A OLE  OLE字符串(等同于W) 例如,从一个Unicode字符串转换为普通字符串不

Convert CString to ANSI string in UNICODE projects

Convert CString to ANSI string in UNICODE projects Quick Answer: use an intermediate CStringA. Normally, this is not something that should be done. *It is technically unreliable, unless you can guarantee that the source CString to be converted does n

1.字符转换

1.将单字节Char转化为双字节的wchar_t的转换函数 wchar_t* c2w(const char *str){     int length = strlen(str)+1;     wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length);     memset(t,0,length*sizeof(wchar_t));     MultiByteToWideChar(CP_ACP,0,str,strlen(str),t,length)

char[] 转换为LPWSTR

1.char[] 转换为 LPWSTR 解决方案: 思路一: 使用CA2W字符转换宏(ATL and MFC String Conversion Macros). 根据MSDN描述,这个宏用于将ANSI转换为Wide Character(UNICODE) 代码如下: LPWSTR aaa = CA2W(text); item.pszText = aaa; 思路二: 使用int MultiByteToWideChar()函数.根据MSDN描述,这个方法:This function maps a c

VC中的字符串转换宏

ATL7.0引入了几个新的转换类和宏,现有的宏提供了显着的改善.新的字符串转换类和宏的名称,采取的形式如下: C SourceType 2[C]DestinationType[EX] 其中,[C]表示目的类型是const类型的,[EX]表示指定了保存字符串数据的固定静态缓存区的大小,如果字符串转换的结果超过了模板参数的大小,使用malloc分配空间,并在对象超出范围时释放内存.所以说这个转换宏(实质是个类)在循环中使用也是安全,它不会堆栈溢出.另外,如果试图分配堆内存和失败,它会调用AtlThr

字符串转换宏

来自MSDN,标题:ATL and MFC String Conversion Macros 对ATL和MFC都有效,对于MFC字符串转换看TN059: Using MFC MBCS/Unicode Conversion Macros 和MFC Macros and Globals 一.ATL

字符串表示与转换

windows 编程中,存在几种字符串表示方式,包括: 1)C-Style 字符串 char* / wchar_t*: 2)C++ STL 字符串 std::string / std::wstring: 3)  ATL/MFC 字符串 CStringA / CStringW; 以上每个版本都有对应的多字节(MBCS)与Unicode(DBCS)表示,其中多字节存在不同编码方案,使用代码页区分.在 windows 系统中,常见代码页有: 1)MS-DOS Latin US, code page 4

C++ double转string类型以及MFC控件简单用法

这两天项目需要,测试c++库里面内容.生成jar再给Android调用.我没有学过C++,现在开始记录C++简单用法.测试时候一般都是使用mfc程序来测试,要输入值,显示结果吗.我用的编译环境vs2008. 一.double 转string #include <string> CString strResultx; strResultx.Format(_T("x:%.4f\n"), 89.7887878); 转换结果还是放在strResultx 2.两个字符串相连 CStr

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

MFC默认编码是unicode(自己改成多字符集是不行的),对话框中对字符串的处理都是宽字符,而且添加变量会默认是CString类型,当你代码中想用string但又遇到必须转为CString的情况,就需要做个转换(比如你代码定义的是string,想要直接给对话框中的变量赋值). 当然直接定义CString而不用string不就好了嘛?当然可以,这个只介绍转换的方法. 1. CString 转 string USES_CONVERSION; CString cstr; string str; st