排除文件类型期望C中的txt文件

时间:2015-01-01 15:43:42

标签: c

你好,新年快乐,

我必须在我的C程序中接受juste txt文件,

我对如何制作它没有任何想法......任何想法?

我不知道文本文件是否包含Header或表征它的东西..

PS:我正在使用Ubuntu,因此看不到文件扩展名。

谢谢

1 个答案:

答案 0 :(得分:0)

在Linux环境中,我个人会使用libmagic,这是实用程序file的核心。此库的目的是完成您要完成的任务:根据文件内容识别文件类型。

示例用法如下所示。

/* identify.c */

#define _POSIX_SOURCE /* required for fileno() */

#include <magic.h>
#include <stdlib.h>
#include <stdio.h>

int main(void) {
    const char *description;
    magic_t cookie;
    FILE *fp;

    fp = fopen("example.txt", "r");

    if(fp == NULL) {
        fprintf(stderr, "error: cannot open file\n");
        exit(EXIT_FAILURE);
    }

    cookie = magic_open(MAGIC_NONE);

    if(cookie == NULL) {
        fprintf(stderr, "error: cannot initialize library\n");
        fclose(fp);
        exit(EXIT_FAILURE);
    }

    if( magic_load(cookie, NULL) != 0 ) {
        fprintf(stderr, "error: cannot load database : %s\n",
                                            magic_error(cookie));
        magic_close(cookie);
        fclose(fp);
        exit(EXIT_FAILURE);
    }

    description = magic_descriptor(cookie, fileno(fp));
    printf("%s\n", description);

    magic_close(cookie);
    fclose(fp);

    return EXIT_SUCCESS;
}

将此源​​文件命名为identify.c,在同一目录中创建包含某些内容的文本文件名example.txt,并使用以下命令编译:

gcc -Wall -std = c99 -pedantic -lmagic -o identify identify.c

然后运行它。

./鉴定

你得到这样的印刷品:

UTF-8 Unicode text

这个库可以用几种不同的方式使用,所以你应该看一下man page。例如,您可以获取MIME类型而不是上面的描述。

libmagic所属的file软件包可能已安装在您的计算机上。但是,如果您使用的是诸如CentOS的RHEL之类的发行版将开发标题拆分为单独的包,请确保已安装file-devel