如何确定文件类型?

时间:2010-11-14 14:31:20

标签: c# file audio mp3

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

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

  

ID3v1标记占用128个字节,以字符串TAG开头。

  

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

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

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

答案 2 :(得分:0)

您可以使用文件扩展名找出它:

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%的文件类型,那么唯一的方法就是读入文件。但这有一个问题,图像文件很容易,因为它们包含一个非常易于阅读的格式的标题,但是对于完全可变的文件类型,它会变得更复杂。

您可以在旧帖子上查看this帖子以获得一些帮助。 Here是关于仅查找媒体文件类型的帖子。

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

答案 3 :(得分:0)

请参阅this帖子。您最终将第一个(最多)256字节的数据从文件传递到FindMimeFromData(Urlmon.dll的一部分)。

答案 4 :(得分:-1)

Path.GetExtension(PathToFile)
相关问题