C 哪一种搜索特定类型的文件更有效?

C 哪一种搜索特定类型的文件更有效?,c,algorithm,system,C,Algorithm,System,假设我正在设计一个文件管理器,并希望按照假定的文件类型来实现对文件的搜索,那么哪种方法更有效- 使用文件名并修剪每个文件的扩展名 对我们正在搜索的文件类型使用特定字节,例如jpeg图像 因为在打开它之前必须知道它的文件名,所以“名称修剪”选项可能会更快。但是,如果扩展名与实际文件类型不匹配,则该方法可能会产生错误的结果 这样做将为您节省一些系统调用(打开、读取,可能是fseek、关闭)。假设您的目标是:“按文件类型搜索”,而无需进一步限制,您必须通过检查实际数据来完成 但是你可能对一些假阳性和假

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

  • 使用文件名并修剪每个文件的扩展名

  • 对我们正在搜索的文件类型使用特定字节,例如jpeg图像


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

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

    假设您的目标是:“按文件类型搜索”,而无需进一步限制,您必须通过检查实际数据来完成

    但是你可能对一些假阳性和假阴性没问题。如果您仅通过查找扩展名来搜索图像文件,则可以获取图像文件的“image.jpg?width=1024&height=800”而不是“image.jpg”,或者获取假阴性,或者获取“image.jpg”而不是“image.exe”,即假阳性

    另一方面,您可以检查文件中的前几个字节——大多数图像数据方案都有一个单独的头。这种方法的失败点要少得多。如果您得到的是一块随机数据,其第一个字节类似于图像文件的头,则可能会出现误报。有可能,但可能性很小。如果标头被剥离,则可能会得到假阴性(例如:在传输过程中,不知何故,或者生成文件的错误脚本)。也有可能,也不太可能,甚至更可能,如果不是更多的话


    小型Unix工具
    file
    可以做到这一点,一旦有了一个易于解析的文本文件,您就可以在自己的项目中使用它了。现在,它是一个包含多个单独文件的大文件夹,甚至没有安装,只是以预编译的形式安装。您可以在线找到包含文本文件的文件夹,例如:手册页
    magic(5)
    中描述了格式,手册页也在线,例如:

    堆栈溢出通常不处理假设问题。然而,很明显,根据文件名做出决定要比打开和查看数据快得多。对于文件名实际上代表文件中的内容类型,您有什么保证?重要吗?重要的是,不应该有误报如果不应该有误报,那么速度/效率实际上并不相关。只有选项2可以防止误报。感谢您的明确解释
    bytes 0xFF, 0xD8 indicate start of image
    
    bytes 0xFF, 0xD9 indicate end of image