查找并检查文件扩展名

时间:2012-01-29 08:56:35

标签: c file-extension

我阅读了其他文章,用C语言从文件名中查找文件扩展名,我试过了,但问题是它们无法正常工作。

这是我的代码:

void optionOne()
{
char filenameSrc[101],filenameDest[101];
strcpy(filenameSrc,"");
do
{
    printf("Enter source filename (*.c) : ");
    scanf("%s",filenameSrc);
}while (check_file_ext(filenameSrc) != 0);
fflush(stdout);
printf("Enter destination filename : ");
scanf("%s",&filenameDest);
char line[80];
FILE* fp = fopen("data.inp","r");
while(fgets(line,sizeof(line),fp))
{
   // do something
}
fclose(fp);
}

和函数check_file_ext:

const char *get_file_ext(const char *filename)
{
   const char *dot = strrchr(filename, '.');
   if(!dot || dot == filename) return "";
   return dot + 1;
}
int check_file_ext(const char* filename)
{
   return strcmp(get_file_ext(filename),"c") == 0;
}

问题在于文件扩展名的检查方法? 你能告诉我代码中的问题在哪里吗?

1 个答案:

答案 0 :(得分:2)

不要返回"",而是返回指向'\0'字节的指针:

// gcc -std=c99
#include <stdio.h>
#include <string.h>

static const char*
get_file_ext(const char *filename) {
   const char *ext = strrchr(filename, '.');
   return (ext && ext != filename) ? ext : (filename + strlen(filename));
}

int main() {
  char *files[] = {"a.c", ".a", "a", NULL };

  for (char** f = files; *f != NULL; ++f)
    printf("ext: '%s'\n", get_file_ext(*f));
}

注意:它会在扩展名中包含.以保持一致性。

Output

ext: '.c'
ext: ''
ext: ''

反向条件:do{ ... }while(strcmp(get_file_ext(filename), ".c") != 0);