【问题标题】:How to identify the original file extensions or mimetype of a file如何识别文件的原始文件扩展名或 mimetype
【发布时间】:2015-05-24 23:55:43
【问题描述】:

有可能将 .exe 文件重命名为 .txt 文件以绕过任何文件类型验证。我正在寻找一种方法来通过读取文件的标题而不使用像 urlmon.dll 这样的 dll 来找出实际的文件类型。

MimeMapping.GetMimeMapping 并不能解决问题,它只是根据扩展名提取 mime 类型。

是否有一本字典说明了哪些字节组合至少代表了非常常见的文件类型,例如 txt、doc、docx、pdf、xls 或 xlsx、exe 等?

【问题讨论】:

  • 您知道您要查找的文件类型吗?只为一种文件类型寻找一个唯一的标头签名要比构建一个通用库来猜测它们要容易得多。您的列表中特别存在的一个问题是 docx 和 xlsx 在粗略检查时似乎都是 zip 文件,需要更深入的分析才能真正弄清楚。即使可行,这也可能会变得昂贵。
  • @DanField - 我现在正在寻找 txt、doc、docx、pdf、xls 和 xlsx。
  • @DanField - 在项目的后期我可能需要支持一些新类型。但我提到的那些是最低限度的。

标签: c# .net mime-types


【解决方案1】:

这不是最优雅的解决方案,但请查看此答案。 How can I determine if a file is binary or text in c#? 您可以通过 psudo 检查文件是二进制文件还是文本文件。

在 cmets 中,有人连续检查了 4 个零字节。 \0\0\0\0 往往表示二进制文件,因为我们不经常输入 NULL 字符。

【讨论】:

    【解决方案2】:

    我想你有点回答了你自己的问题。

    这有点像泡菜。 读取文件头签名,看看它是否匹配它的扩展名。使用FileStream 或类似名称。

    将此与 Tommy DDD 的答案结合起来,我想你已经准备好了。

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多