如何确定特定文件实际上是 MP3 文件?
Posted
技术标签:
【中文标题】如何确定特定文件实际上是 MP3 文件?【英文标题】:How can I determine that a particular file is in fact an MP3 file? 【发布时间】:2011-11-10 06:34:07 【问题描述】:如何确定特定文件(可能有也可能没有“.mp3”文件扩展名)实际上是 MP3 文件?我希望在 C# 中执行此操作。
【问题讨论】:
C# 和文件类型幻数;可能是 ***.com/questions/1654846/… 的副本 如果您使用***.com/questions/184683中提供的解决方案成功加载它,您可能会认为它是有效的MP3 【参考方案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】:-
使用文件扩展名不可靠。
您可以使用的最佳库是https://github.com/mono/taglib-sharp,它可以检测大多数常见文件类型。也许你只是想要 mp3,所以你可以提取任何 mp3 相关的类。
您可以使用的更简单的库是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
【讨论】:
以上是关于如何确定特定文件实际上是 MP3 文件?的主要内容,如果未能解决你的问题,请参考以下文章