当前位置:C++技术网 > 资讯 > C语言提取文件扩展名,分析文件路径提取文件扩展名算法代码

C语言提取文件扩展名,分析文件路径提取文件扩展名算法代码

更新时间:2015-10-06 16:18:23浏览次数:1+次

    以前学习时做的写的一个小算法,就是分析文件路径,提取文件扩展名。这个在处理文件时会用到。说到底,就是分析字符串的问题。这里使用C语言实现,将分析的算法封装在一个函数中,方便使用。大家需要使用,可以自己再调整算法代码。

    程序运行截图:

   

    下面是程序代码,完整的控制台代码:

#include <stdio.h>
#include <string.h>
char * getType(char fileName[], char type[])
{    
    int i=strlen(fileName)-1, j;
    char ch;
    for(type[0]='\0';i>=0;i--)
    {        
        if(fileName[i] == '.')        
        {
            // 遇到文件类型分隔符             
            for(j=i; fileName[j]!='\0'; j++)            
            {                
                ch = fileName[j];                
                type[j-i] = ('A'<=ch && ch<='Z') ? (ch+'a'-'A'): ch;            
            }                            
            type[j-i] = '\0';             
            break;        
        }
    }        
    return type;
}
char * getTypeName(char type[], char typeName[])
{    
	if(strcmp(".doc", type) == 0)        
		strcpy(typeName, "WORD 文档");             
	else if(strcmp(".xlsx", type) == 0)        
		strcpy(typeName, "Excel 工作表");             
	else if(strcmp(".pptx ", type) == 0)        
		strcpy(typeName, "PowerPoint 演示文稿");             
	else if(strcmp(".txt", type) == 0)        
		strcpy(typeName, "文本文档");     
	else         
		strcpy(typeName, "其他类型文档"); 
	return typeName;
}
int main(int argc, char *argv[]) {          
    char fileName[300];     
    char type[10];     
    char typeName[100];     
    printf("输入文件名,可以包含多层目录路径,可以含空格,按 ctrl + z 停止输入\n");    
    while(gets(fileName)!=NULL)    
    {        
        getType(fileName, type);        
        getTypeName(type, typeName);                
        printf("file:[%s] type is [%s],文件类型:%s\n", fileName, type,typeName);    
    }      
    return 0; 
}


    代码解释:

    strlen、strcmp、strcpy函数在string.h头文件中声明,所以需要包含这个头文件。getType函数就是提取文件扩展名的函数了。函数的第二个参数和返回值,都是作为返回扩展名的。你可以根据情况取舍。
    通过对文件名字符长度计数,然后从最尾部向字符串开头的方向遍历,第一次遇到的.号的位置就是扩展名分割的地方。然后在里层的for循环中提取到字符串结尾之间的几个字符作为扩展名。

    至于getTypeName则是解释一下扩展名的类型名称,没有什么,就是演示提取到扩展名后的使用场景而已。在main中也有使用的代码。完整的代码,可以很清楚各个地方的细节。

    学习时留存的笔记,分享出来,就不再电脑存留了,在电脑容易丢失。这样,大家也可以看,一举两得。