判斷檔案型別,一般情況下可以根據檔案字尾約定,使用相應的處理方式處理。
或者基於檔案magic number(檔案的前512個bytes)對檔案型別進行判斷,c/c++可以通過libmagic處理判斷檔案型別,下面是stackoverflow上使用libmagic的實現::
#include #include #include #include using namespace boost;
namespace fs = filesystem;
int main() ))
::magic_close(handle);
}
輸出結果:
sehe@desktop:~/custom/boost/status$ /tmp/test
"./jamfile.v2" ascii text
"./explicit-failures.xsd" xml document text
"./expected_results.xml" xml document text
"./explicit-failures-markup.xml" xml document text
除了這兩種判斷方式,另一種情況是根據檔案內容判斷檔案是否是二進位制檔案,並且不使用libmagic。此時可以借鑑less命令的實現方式,當檔案的前256bytes中包含5個位元組以上的非ascii碼可列印字元,則認為檔案是二進位制檔案。
例如,如果二進位制檔案中僅包含大小寫字母、數字、換行符,根據前n個字元中是否包含非預期字元進行檔案型別判斷可以這樣實現:
bool binaryfile(ifstream &is)
else if (!((c >= 'a' && c <= 'z') || (c >= 'a' && c <= 'z') ||
(c >= '0' && c <= '9') || c == '\r' || c == '\n' ||
c == 0))
}return false;
}
判斷檔案內容時,也可以通過正規表示式進行判斷。當然這個方式也不完全正確,如果使用者提供的檔案內容全是由char '\n』構成,則判斷錯誤。
拋磚引玉,希望大家有更好的實現方案。
判斷檔案型別
判斷檔案型別 檔案的真正型別,不是根據副檔名判斷 通過檔案頭來判斷 檔案型別列舉引數 如下 using system using system.collections.generic using system.linq using system.text namespace servicecontr...
java根據檔名稱判斷檔案型別
author zss 日期 2017年3月31日 功能 根據檔名稱判斷型別 接受引數型別 string 返回引數型別 string 備註 檔案型別不完善,有需要的自行新增 public class filetype else for int i 0 i img.length i 建立文件型別陣列 s...
PHP 判斷檔案型別
參考 黑夜路人 一般我們都是按照副檔名來判斷檔案型別,但是這個很不靠譜,輕易就通過修改副檔名來躲避了,一般必須要讀取檔案資訊來識別。foreach files as file 注 檔名擴充套件 linux不使用檔名擴充套件來識別檔案的型別。相反,linux根據檔案的頭內容來識別其型別。為了提高人類可...