寻找满足后缀要求的第一个文件名及其类型的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,欢迎关注!)

时间: 2024-09-27 19:17:16

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

性能测试-请问loadrunner下载文件保存到本地,怎么自动获取下载的文件名和类型呢

问题描述 请问loadrunner下载文件保存到本地,怎么自动获取下载的文件名和类型呢 用loadrunner做下载文件的性能测试的时候,怎么自动获取到我下载的文件名呢? 解决方案 http://blog.csdn.net/gzh0222/article/details/6788888 解决方案二: [原创]Loadrunner下载文件,并自动生成不重复的文件名

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型

J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步. J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型 (enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱 (autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架 构(Thread framework)

MVC 5 第一章 创建MVC 5 web应用程序_实用技巧

1. MVC 5 应用程序环境配置(参考本人机器配置)     Win7 x64 Enterprise     Visual Studio Express 2013 for Web or Visual Studio 2013 2. 创建一个简单的MVC 5应用程序    启动VS2013(以Administrator权限,防止权限访问错误) 点击File->New->Project创建Web Project 选择Web项目模板,点击ASP.NET Web Application,输入项目名称及

php 显示WEB目录下的所有目录及后缀为php,php3,htm,html的文件名

第一个文件名为 phplist.inc  代码如下 复制代码 <? global $htmlroot; $htmlroot="/web/html"; //"/web/html"是apache的文档根目录,用户可以根据自己的配置修改 ?> 第二个文件名为 codeshow.php  代码如下 复制代码 <? highlight_file($filename); //高亮显示文件代码 ?> 这个是主程序名为 phplist.php  代码如下 复

dos文件名的含义

用dir命令来查看磁盘上文件时,你会发现文件后缀(即文件扩展名)有很多种,它们当中大部分都是有一定含义的. 其中凡后缀为exe.com或bat的文件都是可以直接执行的.这些以exe为后缀的文件叫可执行文件:以com为后缀的文件叫命令文件:以bat为后缀的文件叫批处理文件.如果我们要执行这些文件,只需在提示符下敲入文件基本名然后回车即可,不需输入文件后缀. 比如第一行的这个文件叫format.com,其后缀名为com,如果我们要执行它,只需在提示符下敲入文件基本名然后回车即可,不需输入后缀名.(这

SEO的新大陆,网页文件后缀大有文章

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天在我的域名转发群里瞎聊,说到了自定义网页文件名后缀的时候,突然想到后缀对SEO的作用!似乎发现了SEO新大陆. 以前在网上看到域名和URL对于SEO的效果,这点早已被验证了,但大家往往忽略了一点--网页后缀.如果你的URL是目录结构的就算了,没有新大陆可发现了,如果你的URL还是文件式,还带着老套的.html .asp .php .asp

nginx下无法访问中文文件名的解决方法

今天在网上寻找关于Nginx访问中文目录及文件名的解决方法,偶然看到qwqg的一篇文章!解决问题的思路很清晰,特转载过来与大家一起分享!该方法还没有亲自测试,所以不太确定是否真有用! 方法一: 搞了大半天nginx下无法访问中文文件名的问题,现在看来是secureCRT的问题?看来还是字符集的问题了.看来nginx不需要象apache那样要单独加载支持中文模块. 服务器端字符集如下[root@test]# localeLANG=en_US.UTF-8LC_CTYPE="en_US.UTF-8″L

求解答java通过请求头如何得到文件类型后缀

问题描述 求解答java通过请求头如何得到文件类型后缀 java中,上传一个文件,首先要从文件的请求头中得到文件的内容类型,然后判断文件的扩展名,请知道的大神详细解答! 解决方案 貌似httpservletRequest'类能够获取请求头,查查api有你要的一切 解决方案二: 上传文件,直接从请求体中得到文件的全部信息啊,什么名字,内容,大小都能得到了 解决方案三: 直接使用httprequest就行,具体的方法可以查一下api 解决方案四: 使用commo-fileupload.jar 大概步

中文域名后缀选择

什么是中文域名?所谓的中文域名就是含有中文字符的新一代域名,同英文域名一样,是互联网上的门牌号码.使用中文域名优点也很多,如:1.资源丰富:2.用汉字表达,方便易记:3.利于被搜索引擎收录. 有些人担心中文域名不被浏览器支持,注册中文域名以后其他人用浏览器打不开网站,其实大可不必担心这个问题,因为中文域名已获得IE7.0.Firefox2.0.Netscape8.0等全球主流浏览器全面支持.在我国超过90%的政府网站启用了中文域名,而且90%的用户愿意使用中文域名.所以对于一家公司或企业来说要考