2011-09-04 29 views
7

如何确定某个特定文件(可能有或没有“.mp3”文件扩展名)实际上是一个MP3文件?我希望在C#中做到这一点。我怎样才能确定一个特定的文件实际上是一个MP3文件?

+2

C#和文件类型幻数;可能是http://stackoverflow.com/questions/1654846/in-c-how-can-i-know-the-file-type-from-a-byte –

+1

的副本如果您使用提供的解决方案成功加载它http://stackoverflow.com/questions/184683/,你可能会认为它是一个有效的MP3 –

回答

5

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

作为FVU说,mp3的幻数是0x49 0x44 0x33

14

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

所以:

  • 如果文件开始用十六进制49 44 33

  • 如果文件用十六进制开始ff fb

它是安全的假设,它是一个MP3。

1
string[] filePath = Directory.GetFiles(fbdialog.SelectedPath.ToString(),".mp3", 
             SearchOption.AllDirectories); 

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

这没有错,但它不可靠。 –

-2

C#代码:

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