2017-05-09 23 views
0

想我设计一个文件管理器,并希望通过它的类型来实现文件的搜索假设然后这些方法之一将更有效率 -哪一个会更有效地搜索某种类型的文件?

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

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

bytes 0xFF, 0xD8 indicate start of image 

bytes 0xFF, 0xD9 indicate end of image 
+0

堆栈溢出通常不会处理假设问题。但是,似乎很清楚,根据文件名作出决定比打开和查看数据要快得多。 – lit

+0

你有什么保证,文件名实际上代表文件中的内容类型?有关系吗? – Soren

+0

是的,它不应该是错误的积极 – varnit

回答

1

既然你已经知道这是在开放之前的文件名吧,名字微调选项将可能更快。但是,如果扩展名与实际文件类型不匹配,那么使用该方法可能会产生错误结果。

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

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

+0

感谢您的明确解释 – varnit