首页 > 代码库 > linux c实现的提取文件名的小程序
linux c实现的提取文件名的小程序
/*@author etangyushan
*工作中很多时候会和文件名打交道,有时候只需要文件名称,就写了这么一个小程序
*这个函数实现了把一个文件的绝对路径和后缀去除,只留下文件名的功能
* */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//找到最后的slash(/)
int last_mark (char *str, char mark)
{
int site = 0;
int count = 0;
while (site <= strlen(str))
{
if (str[site++] == mark)
{
count = site;
}
}
return count;
}
//找到第一个dot(.)
int first_mark (char *str, char mark, int num)
{
int count = num;
while (1)
{
if (str[count++] == mark)
{
break;
}
}
return count;
}
/* 从文件全名中把文件名提取出来,没有后缀 */
int substr (char *srcstr, char **decstr, int lastslash, int firstdot)
{
int i = 0;
//int ls = lastslash;
char *str = *decstr;
printf("last=%d,first=%d\n", lastslash, firstdot);
printf("size=%d\n", firstdot-lastslash);
int size = firstdot-lastslash-1;
for (i=0; i<size; i++)
{
//str[i] = srcstr[ls++];
printf("...%c...\n",srcstr[lastslash]);
str[i] = srcstr[lastslash++];
}
}
//测试
int main()
{
char *file = "/root/etc/init.d/mytettttt.c";
char *name = (char*)malloc(256);
int lastnum = last_mark (file, ‘/‘);
//printf ("lastnum=%d\n", lastnum);
int firstnum = first_mark (file, ‘.‘, lastnum);
//printf ("firstnum=%d\n", firstnum);
substr (file, &name, lastnum, firstnum);
printf ("name = %s\n", name);
free(name);
name = NULL;
}