2014-05-13 52 views
-1

如果文件是文本文件(例如文件),是否有任何檢查Linux C的方法? UTF或ASCII?在bash中我們有函數file。 C中有沒有等價物?檢查文件是否爲純文本C

編輯:這是我的函數來驗證在C文本文件。我使用popen,但它不能正常工作。有時我在pclose中有錯誤。代碼中需要編輯什麼?

int check_file(char *path) 
{ 
FILE *file_type; 
char command[] = "/usr/bin/file"; 
char command_to_execute[512]; 
char check[512]; 
int correct = 0; 
sprintf(command_to_execute,"%s %s",command,path); 
file_type = popen(command_to_execute,"r"); 
if(file_type == NULL) 
{ 
    return correct; 
} 
fgets(check,512,file_type); 
char *pointer; 
pointer = strstr(check,"ASCII"); 
if(pointer != NULL) 
    correct = 1; 
pointer = strstr(check,"UTF"); 
if(pointer != NULL)  
    correct = 1;   
pclose(file_type); 
return correct; 
} 
+1

有'libmagic'庫用於實現'文件'。 –

+2

閱讀文件並查看它是否包含文本。 –

+0

system(「file」+ nameOfUfile); – qulinxao

回答

3

file是一個程序(不是bash函數)。您可以閱讀該文件並檢查非ASCII字符。如果發現任何輸出false並停止處理,如果到達文件輸出結尾true

+0

正確,但僅適用於純ASCII文件。即使如此:「ASCII」(或OP命名爲「ascci」)是一個滑溜的概念。 Backspace是否允許?是否允許換頁? CTR + Z是一個有效的文件結尾(即使後面是二進制垃圾)還是會導致「非純文本」? UTF8/UTF16也有類似的問題:你可以證明它只包含有效的UTF8/UTF16序列,但它本身沒有說什麼。 (雖然反向 - 無效*序列 - 證明它不是文本文件。) – usr2564301

0

您可以使用libicu來測試某個字符串是否與特定編碼匹配。 Iconv 是另一種替代