Al comprobar si un archivo MP3 se está comprobando la cadena de nombre de archivo con un .EndsWith lo suficientemente bueno?

StackOverflow https://stackoverflow.com/questions/1704550

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy haciendo esto:

    private void LoadSoundFile()
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (openFileDialog1.FileName.EndsWith(".mp3"))
            {
                txtFileName.Text = openFileDialog1.FileName;
            }
            else
            {
                MessageBox.Show("Currently Musicality only supports MP3 files.", "Unsupported file chosen.");                        
            }
        }

    }

¿Hay una mejor manera de comprobar los tipos de archivos o estoy haciendo de la manera correcta?

¿Fue útil?

Solución

Tener la extensión .mp3 no significa que es un MP3, pero no teniendo que es una indicación (aceptable) que no es.

En algún momento va a llamar a algunos API para reproducir el archivo, y se producirá un error. Cuando lo hace, usted sabe que no es un archivo reproducible. Así que asegúrese de manejar que con un poco de interfaz de usuario decente.

Otros consejos

Su pregunta parece preguntar si el camino correcto para comprobar si un archivo es MP3 es mirar al final del nombre de archivo. Como otros han dicho, la respuesta es no. El post de Matt Warren puede ayudarle si desea buscar en el archivo para ver si en realidad es el formato mp3.

Pero su comentario sobre la respuesta de Eran Betzalel hace que me pregunte si está solicitando general ya sea de la manera correcta para comprobar una extensión de archivo es utilizar String.EndsWith ().

Una cosa a notar es que EndsWith (cadena) entre mayúsculas y minúsculas, por lo que los resultados de:

EndsWith("mp3")
EndsWith("Mp3")
EndsWith("MP3")

y

EndsWith("mP3")

No todos dan la misma respuesta. Una prueba mejor podría ser:

if (Path.GetExtension(openFileDialog1.FileName).ToLower() == "mp3")

Si todo lo que importa es la extensión de archivo y no el contenido del archivo.

Si realmente se desea analizar el archivo (para comprobar si realmente es un .mp3) tendrá que mirar en la especificación para que analizarlo correctamente. Aquí es un buen lugar para empezar y hay algo más de información aquí . Este artículo en el CodeProject va aún más lejos y extrae las etiquetas ID3, así como la cabecera.

Esto será mejor que sólo la comprobación de que la extensión es" .mp3" , pero es un montón de trabajo extra por lo que tiene que valer la pena.

En realidad depende de la naturaleza de su programa. Creo que si usted es no el desarrollo de una aplicación relacionada con la seguridad, a continuación, puede utilizar la simple comprobación de extensión.

No, porque la extensión de archivo es simplemente un indicador, no es una guía fiable de lo que el archivo es o contiene.

Puedo nombrar i archivo de música como mySong.zzz y va a seguir jugando en Winamp. Cuando carga que usted debe probar el inicio del archivo para ver si realmente es un mp3.

También puede establecer un filtro en el diálogo de abrir archivo de modo que sólo permite al usuario seleccionar los archivos mp3:

openFileDialog1.Filter = "mp3|*.mp3|All Files|*.*";

Creo que la forma correcta de comprobar realmente si se trata de un archivo MP3 (esto requiere que se abra el archivo) es la búsqueda de "números mágicos", secuencias de bytes dentro de los datos binarios que siempre ocurre. En este caso, se puede utilizar un número mágico de la etiqueta ID3: ID3v1 se almacenan en los últimos 128 bytes del archivo que comienzan con los bytes "TAG" (hexadecimal "544147"), mientras que las etiquetas ID3v2 se almacenan en el principio del archivo , por lo que los 3 primeros bytes del archivo son "ID3" (hexadecimal "494433"). No sé si el MP3 marcos mismos tienen números mágicos simples como esto. Obviamente, este método requiere que el archivo que se abrirá, lo que podría hacer una exploración de un gran número de archivos más lentas.

Si usted quiere estar seguro, cargar el archivo con este http://sourceforge.net/projects / id3dotnet / se producirá un error con una excepción si no es un mp3. Basta con crear un nombre de archivo o Id3.Net.Mp3File con corriente en el constructor de una ver si se produce una excepción

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top