作为一般性问题:在确定文件类型时,文件扩展的作用是什么?
例如,我可以将.jpeg文件更改为.png扩展名甚至.txt。当然,在更改为.txt的情况下,它既不会被打开,也不会被读取。
要确定文件类型,似乎安全的方法是解析文件的前几个字节。如果扩展名不可信,则扩展名不会超过文件名。
答案 0 :(得分:1)
作为一般规则,您应该始终解析COMPLETE文件,以确保该文件是扩展名所说的文件。正如您可以轻易想象的那样,创建类似于例如二进制文件的二进制文件非常简单。 BMP(带有正确的标题)但随后包含不同的内容。
您永远不应该信任该扩展名,因为否则恶意用户可能会利用您的某些代码来生成例如缓冲区溢出,如果您正在编写必须以root / admin权限运行的程序,这绝对是最重要的。
说得很明显,现在主要使用文件扩展名,以便操作系统可以将程序与该特定文件相关联(通常调用程序并将所选文件作为第一个参数传递),然后由程序决定确定文件内容。
谈论可执行文件时有点不同。在Unix下,为了可执行,文件必须设置“x”标志,否则它将无法运行,无论扩展名如何。在Windows下,没有这样的东西,操作系统只依赖一些扩展(EXE,COM,BAT等)来确定哪些文件可以执行。
例如,EXE文件必须以“MZ”开头,然后是一些有关其分配和大小(http://www.delorie.com/djgpp/doc/exe/)的信息,操作系统肯定会检查其内部标题。其他格式(例如MS-DOS时代的COM可执行格式)只是“纯”汇编代码,因此OS没有检查。它只是解释那些操作码,希望一切都会好的。所以,总结一下:
主要使用文件扩展名,以便操作系统可以调用相应的程序打开它(并将文件名作为第一个参数传递,例如用C语言传递argc / argv)
Windows依赖某些文件扩展名来了解文件是否可执行,而Unix / Mac依赖于与文件关联的特定标志(x)
关于文件扩展名不为人知的两件事:目录名也可以有扩展名,扩展名可能比通常的3个字符长。
答案 1 :(得分:0)
在文件扩展名的帮助下,您知道如何读取前几个字节和其余所有字节。您还知道用于读取文件的程序。或者,如果它是可执行文件,您知道它将被执行而不会显示为图片。
是的,您可以更改文件扩展名,但这意味着什么?它只表示操作系统(或任何试图读取该文件的程序)正常工作。只有你提供了不好的数据。
文件扩展名不是某些字节数据固有的东西。这些字节的扩展名取决于协议,然后以这种方式写入。在以二进制形式编码字母后,您提供具有.txt扩展名的二进制形式,以便文本阅读器知道这些字节转换为字母。这是文件扩展的作用。如果文件扩展名不正确,则不会履行此角色,从而导致您对以二进制文件保存的数据不理解。
答案 2 :(得分:0)
作为一般性问题:确定文件类型时文件扩展的作用是什么?
文件扩展名通常标识打开文件的应用程序。
如果您将.JPG重命名为.PNG,并且在同一应用程序(通常是图像查看器)打开JPG和PNG时该应用程序可以读取图像流并正确处理它,无论文件流是否正确。 / p>
如果以文件路由到无法处理文件内容的应用程序的方式重命名文件,则会出现问题。
如果将.DOCX(word)文件重命名为Autocad扩展名(.DWG),则在autocad中打开word文件可能会产生错误(除非autocad可以读取word文件)。