2011-09-04 15 views
7

¿Cómo puedo determinar que un archivo en particular (que puede o no tener una extensión de archivo ".mp3") es en realidad un archivo MP3? Deseo hacer esto en C#.¿Cómo puedo determinar que un archivo en particular es en realidad un archivo MP3?

+2

C# y tipo de archivo números mágicos; posiblemente un duplicado de http://stackoverflow.com/questions/1654846/in-c-how-can-i-know-the-file-type-from-a-byte –

+1

Si lo carga correctamente con la solución provista en http://stackoverflow.com/questions/184683/, podría considerarlo como un MP3 válido –

Respuesta

5

Los archivos a menudo comienzan con un "número mágico" para identificar el formato de datos. Dependiendo del formato, un archivo comienza con una cierta secuencia de bytes que es única para ese formato. No hay un estándar a seguir, por lo que no es 100% confiable.

Como FVU dice, el número mágico mp3 es 0x49 0x44 0x33

14

Según http://www.garykessler.net/library/file_sigs.html un archivo mp3 siempre comenzará con ID3 (hex 49 44 33) Sin embargo, la presencia de estos bytes solamente significa que el archivo está etiquetado con ID3 information . Si no se encuentra esta firma, podría ser un archivo mp3 sin etiquetar. Para determinar esto, mira the mp3 file structure y verás que un marco mp3 comienza con la firma ff fb (hex).

Así:

  • si archivo comienza hexagonal 49 44 33

o

  • si archivo comienza con hexagonal ff fb

que es seguro asumir que se trata de una MP3.

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

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

No está mal, pero no es confiable. –

-2

código C#:

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