如何确定文件类型?

我需要知道我的文件是否是音频文件:mp3,wav等…
这该怎么做?

好吧,最强大的方法是为你想要检测的文件类型编写一个解析器然后尝试 – 如果没有错误,它显然是你尝试的类型。 然而,这是一种昂贵的方法,但它确保您可以成功加载文件,因为它还将检查文件的其余部分是否具有语义健全性。

一个便宜得多的变体就是寻找“魔术”字节 – 开始时的签名或文件的已知偏移量。 例如,如果文件以ID3标签开头,您可以合理地确定它是MP3文件。 如果文件以RIFF¼↕☻ WAVEfmt ,则它是WAV文件。 但是,这样的检测不能保证文件确实属于那种类型 – 它可能只是签名并跟随垃圾。

虽然您可以使用扩展程序来合理地猜测文件是什么,但不能保证100%的时间都能正常工作。 如果您的目标是Windows,那么它将在99.9%的时间内工作,因为Windows会跟踪哪种文件是什么类型。

如果从非Windows源获取文件,唯一可靠的方法是打开文件并查找特定的字符串或字节集,这些字符串将明确地识别它。 例如,您可以在mp3文件中查找ID3标签 :

ID3v1标记占用128个字节,从字符串TAG开始。

要么

ID3v2标签的大小可变,通常出现在文件的开头,以帮助流媒体。

您走多远取决于您希望解决方案的强大程度,并且依赖于始终存在的标题或模式。

这样做可以帮助防止恶意内容,其中有人将一个恶意软件发布为mp3文件(比如说),并希望它只是由一个容易受到攻击的程序(可能是缓冲区溢出)运行。

看这篇文章。 您最终将第一个(最多)256字节的数据从文件传递到FindMimeFromData(Urlmon.dll的一部分)。

您可以使用文件扩展名来计算出来:

 using System.IO; class Program { static void Main() { string filepath = @"C:\Users\Sam\Documents\Test.txt"; string extension = Path.GetExtension(filepath); if (extension == ".mp3") { Console.WriteLine(extension); } } } 

文件扩展名是操作系统找出它正在处理的文件类型的第一个调用点,如果你真的想知道100%的文件类型,那么唯一的方法就是读入文件。 但这有一个问题,图像文件很容易,因为它们包含一个非常易于阅读的标题,但是对于完全可变的文件类型它可能会变得更复杂一些。

您可以在旧post上查看此post以获得一些帮助。 这是一篇关于只查找媒体文件类型的post。

最终,这取决于你为什么要这样做。

 Path.GetExtension(PathToFile)