1. Git 判断方式
文本文件不会存在某个字节的值为 0 的情况。
判断逻辑:
- 获取文件前 8000 个字节数据
- 依次这 8000 个字符中是否有字符值为 0。如果存在 0,表示文件为二进制文件;反之,为文本文件。
#define FIRST_FEW_BYTES 8000
int buffer_is_binary(const char *ptr, unsigned long size)
{
if (FIRST_FEW_BYTES < size)
size = FIRST_FEW_BYTES;
return !!memchr(ptr, 0, size);
}
2. Linux 通过 file 命令判断
file 命令功能非常强大,可以显示出每个文件的具体类型。如果只是简单的区分文本文件和二进制文件,可以判断文件是否为 ASCII text
,如果是,则为文本文件;反之,为二进制文件。
2.1. 文本文件
[root@]# file 1.txt
1.txt : C source, ASCII text
2.2. 可执行文件
[root@]# file time
time: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
2.3. 视频
[root@]# file 11.avi
11.avi: RIFF (little-endian) data, AVI, 640 x 640, 30.00 fps, video: FFMpeg MPEG-4, audio: MPEG-1 Layer 3 (mono, 44100 Hz)
2.4. 图片
[root@]# file 4345559.png
4345559.png: PNG image data, 888 x 1038, 8-bit colormap, non-interlaced