区分三个概念:
- 识别文件处理程序的机制
- 文件格式
- 文件类型
“机制”在 Windows 世界里即 MIME 类型和扩展名,“格式”是通用、良定义概念,即所有有效文件内容构成的集合,楼主的问题在于不理解或者不能形成“类型”的良定义,且会混淆“格式”和“类型”的概念。
可以如此定义:文件是“A 类型”当且仅当它是 A 格式且具有正确识别 A 的处理程序的机制。
那么在 Windows 里,把磁盘上有效的 PNG 类型文件的扩展名改为 .jpg ,那么该文件仍然是 PNG 格式,但不再具有正确的识别机制,从而不是有效的 PNG 类型的文件,由于 PNG 格式和 JPEG 格式不相交,也可以推断该文件不是有效的 JPEG 格式的文件,从而也不可能是有效的 JPEG 类型的文件。
再举一个例子:考虑修改有效的 C++ 源代码类型的文件的扩展名为 .txt ,由于文本格式是 C++ 源代码格式的超集,可以判断修改后的文件仍然是有效的文本类型的文件,且仍然是有效的 C++ 源代码格式的文件,但不再是有效的 C++ 源代码类型的文件。
再举一个例子:考虑一个不使用扩展名和 MIME 类型的系统,在这个系统里修改扩展名不会对格式和类型产生任何影响。
@
jinliming2 #31 在几乎所有现实的系统中,读取文件名比文件内容的前几个字节效率都要高很多倍。如果文件类型需要在 UI 上有所反映(例如不同类型的文件可以有不同的操作,而不仅仅是“打开”一个操作,或者不同类型的文件需要使用不同的图标等),那么通过文件内容识别绝对是糟糕透顶的设计。
另外几乎所有值得使用的浏览器都会在另存为的时候自动识别 MIME 类型并通过文件关联查询 MIME 类型对应的扩展名,然后帮用户加上。