以下這段是VC中過去文件后綴名的方法
/////////////////////////////////////////////////////////////////////////
//
// 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 );
- }
- Path created with _makepath: c:\sample\crt\makepath.c
- Path extracted with _splitpath:
- Drive: c:
- Dir: \sample\crt\
- Filename: makepath
- Ext: .c