C语言 哪一个在搜索某种类型的文件时更有效?



假设我正在设计一个文件管理器,并希望假设按文件类型实现文件搜索,那么这些方法中的哪一种会更有效 -

  1. 使用文件的名称并修剪每个文件的扩展名。

  2. 我们正在搜索的文件类型使用特定字节,例如在 JPEG 图像的情况下。

bytes 0xFF, 0xD8 indicate start of image
bytes 0xFF, 0xD9 indicate end of image

由于您必须在打开它之前知道它的文件名,因此名称修剪选项可能会更快。但是,如果扩展名与实际文件类型不匹配,则使用该方法可能会产生错误结果。

这样做可以节省一些系统调用(打开,读取,也许是fseek,关闭)。

假设您的目标是:"按文件类型搜索文件"而没有进一步的限制,您必须通过检查实际数据来做到这一点。

但您可能可以接受一些误报和漏报。如果您仅通过查找扩展名来搜索图像文件,则可以获得"image.jpg?width=1024&height=800"而不是"image.jpg",用于图像文件,漏报,或"image.jpg"而不是"image.exe",误报。

另一方面,您可以检查文件中的前几个字节 - 大多数图像数据方案都有一个单独的标头。这种方法的故障点要少得多。如果您获得了一大块随机数据,其中第一个字节类似于图像文件的标头,则可能会获得误报。有可能,但极不可能。如果标头被剥离,您可能会得到漏报(例如:在传输中,以某种方式,或生成文件的错误脚本)。也有可能,也不太可能,甚至更多,如果不是更多的话

小型Unix工具file做到这一点,并且曾经有一个易于解析的文本文件,您可以将其用于自己的项目。如今,它是一个包含多个单个文件的大文件夹,甚至没有安装,只能以预编译的形式安装。您可以在线找到包含文本文件的文件夹,例如: http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/saucy/file/saucy/files/head:/magic/Magdir/该格式在手册页magic(5)中描述,该手册页也在线,例如:https://linux.die.net/man/5/magic

相关内容

最新更新