哪一个会更有效地搜索某种类型的文件?

时间:2017-05-09 15:45:56

标签: c algorithm system

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

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

  2. 使用特定字节作为我们搜索的文件类型,例如jpeg图像。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

但你可能会对某些误报和漏报感到满意。如果您通过仅查找扩展名来搜索图像文件,则可以为图像文件,假阴性或“image.jpg”获取“image.jpg?width = 1024& height = 800”而不是“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