2015-01-01 59 views
-5

您好,新年快樂txt文件,排除文件類型期望用C

我必須接受我的C程序中庸之道txt文件,

我沒有任何想法如何做到了。 。 有任何想法嗎?

而且我不知道,如果文本文件包含頁眉或表徵它的東西..

PS:我使用Ubuntu所以文件擴展名是沒見過。

謝謝

+2

請張貼給你麻煩的代碼。 –

+1

你可以顯示一些你已經嘗試過但不能工作的代碼嗎? –

+0

爲什麼 - 10哈哈,我還沒有一個代碼,我剛剛使用指針和fopen加載了一個文本文件,但我想denny任何其他文件類型 – user3568611

回答

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識別標識.c

然後運行它。

./identify

,你會得到這樣的印:

UTF-8 Unicode text 

這個庫可以在幾個不同的方式來使用,所以你應該有一個看看man page。例如,您可以獲取MIME類型,而不是像上面那樣的描述。

其中libmagic是其中的一部分的file包可能已經安裝在您的機器上。但是,如果您使用的是像CentOS的RHEL這樣的發行版將開發標題分割成單獨的包,請確保已安裝file-devel

相關問題