【问题标题】:How can I determine that a particular file is in fact an MP3 file?如何确定特定文件实际上是 MP3 文件?
【发布时间】:2011-11-10 06:34:07
【问题描述】:

如何确定特定文件(可能有也可能没有“.mp3”文件扩展名)实际上是 MP3 文件?我希望在 C# 中执行此操作。

【问题讨论】:

标签: c#


【解决方案1】:
string[] filePath = Directory.GetFiles(fbdialog.SelectedPath.ToString(),".mp3", 
                                       SearchOption.AllDirectories);

foreach (string str in filePath)
{
    MessageBox.Show("It's mp3 file");
}

【讨论】:

    【解决方案2】:

    C#代码:

    bool isMP3(byte[] buf)
    {
        if (buf[0] == 0xFF && (buf[1] & 0xF6) > 0xF0 && (buf[2] & 0xF0) != 0xF0) 
        {
             return true;
        }
        return false;
    }
    

    【讨论】:

      【解决方案3】:
      1. 使用文件扩展名不可靠。
      2. 您可以使用的最佳库是https://github.com/mono/taglib-sharp,它可以检测大多数常见文件类型。也许你只是想要 mp3,所以你可以提取任何 mp3 相关的类。
      3. 您可以使用的更简单的库是https://github.com/judwhite/IdSharp

      【讨论】:

        【解决方案4】:

        根据http://www.garykessler.net/library/file_sigs.html,mp3 文件将始终以 ID3(十六进制 49 44 33)开头,但是,这些字节的存在仅意味着该文件被标记为ID3 information。如果未找到此签名,则可能是未标记的 mp3 文件。要确定这一点,请查看the mp3 file structure,您会看到一个 mp3 帧以签名 ff fb(十六进制)开头。

        所以:

        • 如果文件以十六进制开头49 44 33

        • 如果文件以十六进制开头ff fb

        假设它是 MP3 是安全的。

        【讨论】:

          【解决方案5】:

          文件通常以“幻数”开头,以标识数据格式。根据格式,文件以该格式独有的特定字节序列开始。没有可遵循的标准,因此它不是 100% 可靠的。

          正如 fvu 所说,mp3 幻数是0x49 0x44 0x33

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-26
            • 1970-01-01
            • 2016-11-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多