寻找满足后缀要求的第一个文件名及其类型的C程序实现

简介:        问题描述       有多个带后缀的用分号分隔的文件名(形如:1.xml;2.pdf;3.jpg;4.txt),编写C程序用于将满足后缀要求的第一个文件名找出来,并显示文件的类型。

       问题描述

       有多个带后缀的用分号分隔的文件名(形如:1.xml;2.pdf;3.jpg;4.txt),编写C程序用于将满足后缀要求的第一个文件名找出来,并显示文件的类型。

       规定的后缀及文件类型对应如下:

       语音:类型1,后缀wav;

       视频:类型2,后缀3gp;

       传真:类型3,后缀tif;

       图片:类型4,后缀jpg;

       文本:类型5,后缀txt。

 

       对于“1.xml;2.pdf;3.jpg;4.txt”,程序需输出文件名“3.jpg”和类型“4”。即“3.jpg”是满足后缀要求的第一个文件名,该文件的类型是“4”(图片)。

 

       C程序实现

/**********************************************************************
* 版权所有 (C)2014, ZhouZhaoxiong。
*
* 文件名称: SuffixTest.c
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本: V1.0
* 作   者:周兆熊
* 完成日期: 20141106
*
* 修改记录1:
* 修改日期: 20141106
* 版本号: V1.0
* 修改人: Zhou Zhaoxiong
* 修改内容:创建
**********************************************************************/
#include
#include
 
 
// 数据类型
typedef signed   char INT8;
typedef unsigned char UINT16;
typedef unsigned int  UINT32;
typedef signed   int  INT32;
 
 
#defineMAX_FILESUFFIX_LEN   6  // 文件后缀单个最大长度
#defineMAX_FILESUFFIX_NUM   6  // 文件后缀最大个数
 
 
// 函数声明
INT32 ParseMsgContent(INT8 *pContent, INT8 *pFileName, INT32 *piFileType); // 该函数用于解析传入的内容,获取文件名和文件类型
void  GetFileSuffix(INT8 *pFileName, INT8 *pSuffix);    // 该函数用户获取文件后缀
INT32 GetFileType(INT8*pSuffix, INT32 *piFileType);  // 该函数用于获取文件类型
INT32 main(void);
 
 
/****************************************************************
* 功能描述:  主函数                                             
* 输入参数:  无                                                
* 输出参数:  无                                                
* 返回值: 0-执行成功  -1-执行失败                           
* 其他说明:  无                                                
* 修改日期        版本号        修改人        修改内容
*--------------------------------------------------------------
* 20141106        V1.0       Zhou Zhaoxiong     创建
****************************************************************/
INT32 main(void)
{
    INT32 iRetValue           = 0;      
    INT8 szMsgContent[512]    = {0};
    INT8 szFirstFileName[100] = {0};      // 第一个文件名, 形如: 1.jpg
    INT32 iFileType           = 0;         // 文件类型
 
 
    memcpy(szMsgContent, "1.xml;2.pdf;3.jpg;4.txt",strlen("1.xml;2.pdf;3.jpg;4.txt"));
   
    // 调用函数解析第一个满足后缀要求的文件名, 并打印出来
    iRetValue = ParseMsgContent(szMsgContent,szFirstFileName, &iFileType);
    if (iRetValue != 0)
    {
        printf("exec ParseMsgContentfailed.\n");
        return -1;
    }
       
    printf("MsgContent=%s, FirstFileName=%s,FileType=%d\n", szMsgContent, szFirstFileName, iFileType);
 
 
    return 0;
}
 
 
/**********************************************************************
* 功能描述:解析消息内容
* 输入参数: pMsgContent-消息内容
* 输出参数: pFileName-文件名
             piFileType-文件类型
* 返回值: 0-成功   其他-失败
* 其它说明:消息字段之间用分号(;)分隔
* 修改日期         版本号           修改人         修改内容
*---------------------------------------------------------------------
* 20141106         V1.0           Zhou Zhaoxiong     创建
***********************************************************************/
INT32ParseMsgContent(INT8 *pMsgContent, INT8 *pFileName, INT32 *piFileType)
{
       INT8 szMsgContent[512] = {0};
       INT8 szFileName[50+1] = {0};
       INT8 szSuffix[MAX_FILESUFFIX_LEN+1] ={0};
       INT8 *pEndStr   = NULL;
       INT8 *pBeginStr = NULL;
       INT8 *pSuffix = NULL;
       INT32 iLen = 0;
       INT8 szField[10][50+1] = {0};
       INT32 iFieldLen = 0;
       INT32 iFlag     = 0;
       INT32 iLoopFlag = 0;
       INT32 iRetValue = 0;
 
 
       if( pMsgContent == NULL || pFileName == NULL || piFileType ==NULL )    
       {
           printf("ParseMsgContent(...):input parameter(s) is NULL.\n");
           return -1;
       }
 
 
       memcpy(szMsgContent, pMsgContent, sizeof(szMsgContent)-1);
 
 
       printf("ParseMsgContent(...): whole content=%s.\n",szMsgContent);
 
 
       iLen = strlen(szMsgContent);
 
 
       if (szMsgContent[iLen-1] != ';')
       {
           strcat(szMsgContent,";");
       }    
      
       pBeginStr = szMsgContent;
 
 
       // 首先将整个content字段解析出来, 只解析前10个字段
       while((pEndStr = strchr(pBeginStr, ';')) != NULL)
       {
           if((pEndStr - pBeginStr) >= 50)
           {
               iFieldLen = 50;
           }    
           else
           {
               iFieldLen = pEndStr - pBeginStr;
           }
 
 
           strncpy(szField[iFlag], pBeginStr, iFieldLen);
 
 
           pBeginStr = pEndStr + 1;
 
 
           iFlag ++;
 
 
           if (iFlag >= 10)
           {
              break;
           }    
       }    
      
       // 开始判断文件类型, 只取符合后缀要求的第一个文件, 最多有10个文件
       *piFileType = 0;
       for (iFlag = 0; iFlag =MAX_FILESUFFIX_LEN))
       {
              iFieldLen = MAX_FILESUFFIX_LEN;
       }    
       else
       {
              iFieldLen = strlen(pFileName) - (pStr + 1 - pFileName);
       }
             
       strncpy(pSuffix, pStr + 1, iFieldLen);
             
       return;
}
 
 
/**********************************************************************
* 功能描述:获取文件类型
* 输入参数: pSuffix-文件后缀
             piFileType-文件类型
* 输出参数:无
* 返回值: 0-成功其他-失败
* 其它说明:无
* 修改日期         版本号             修改人         修改内容
*-------------------------------------------------------------------------------------------------------
* 20141106          V1.0           Zhou Zhaoxiong     创建
***********************************************************************/
INT32 GetFileType(INT8*pSuffix, INT32 *piFileType)
{
       INT8  szSuffix[10] ={0};
       INT32 iFlag        = 0;
 
 
       if (pSuffix == NULL || piFileType == NULL)
       {
           printf("GetFileType(...): inputparameter(s) is NULL.\n");
           return -1;
       }    
 
 
       strncpy(szSuffix, pSuffix, sizeof(szSuffix)-1);
             
       *piFileType = 0;
 
 
       for (iFlag = 0; iFlag 


       程序输出结果

       可见,程序将满足后缀要求的第一个文件名“3.jpg”找了出来,该文件的类型是“4”(图片)。

 

(原文链接:http://www.zhouzhaoxiong.com/258.html)

 (本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

目录
相关文章
|
4天前
|
Java
怎样查找某个目录下内容含有某个字符串的文件或多久之前的文件
怎样查找某个目录下内容含有某个字符串的文件或多久之前的文件
|
13天前
|
弹性计算 运维 Shell
|
1月前
|
Linux Shell
Linux脚本获取输入参数判断文件还是文件路径
Linux脚本获取输入参数判断文件还是文件路径
13 4
|
5月前
|
存储 Unix Linux
Python将多个文件的名称或后缀名由大写字母修改为小写的方法
Python将多个文件的名称或后缀名由大写字母修改为小写的方法
|
10月前
C --- 自定义一个宏打印当前文件名、函数名、行号
C --- 自定义一个宏打印当前文件名、函数名、行号
131 0
|
11月前
返回文件名问题
返回文件名问题
40 0
|
C语言
gcc编译时rpath可以使用多个路径,用:分隔
gcc编译时rpath可以使用多个路径,用:分隔
121 0
|
Shell
SHELL中从变量中截取后缀、文件名、目录名
SHELL中从变量中截取后缀、文件名、目录名
134 0
|
Linux Perl
Linux如何查找处理文件名后包含空格的文件
Linux如何查找处理文件名后包含空格的文件   当Linux下文件名中出现空格这类特殊情况话,如何查找或确认那些文件名后有空格呢? 又怎么批量替换处理掉这些空格呢?     方法1: 输入文件名后使用Tab键,如果使用Tab键后面出现\ \ \这样的可见字符,那么该文件名包含空格。
1409 0