Quando si controlla se un file viene MP3 sta controllando la stringa di nome di file con un .EndsWith abbastanza buono?

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

  •  19-09-2019
  •  | 
  •  

Domanda

sto facendo questo:

    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.");                        
            }
        }

    }

C'è un modo migliore di controllare i tipi di file o sto facendo nel modo giusto?

È stato utile?

Soluzione

vista l'estensione .mp3 non significa che è un mp3, ma non avendo è un'indicazione (accettabile) che non è.

A un certo punto si chiamerà alcune API per riprodurre il file, e fallirà. Quando lo fa, si sa che non è un file riproducibile. Quindi assicuratevi di gestire che con un po 'decente UI troppo.

Altri suggerimenti

La tua domanda sembra chiedere se il modo giusto per verificare se un file è MP3 è di guardare alla fine del nome del file. Come altri hanno già detto, la risposta a questa domanda è no. Il post di Matt Warren può aiutare se si vuole esaminare il file per vedere se è in realtà formato mp3.

Ma il vostro commento sulla risposta di Eran Betzalel mi domando se ti stai chiedendo in generale se il modo giusto per controllare un estensione del file è quello di utilizzare String.EndsWith ().

Una cosa da notare è che EndsWith (stringa) è case-sensitive, quindi i risultati di:

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

e

EndsWith("mP3")

non tutti danno la stessa risposta. Un test migliore potrebbe essere:

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

se tutto ciò che interessa è l'estensione del file e non il contenuto del file.

Se si vuole realmente per analizzare il file (per verificare se è davvero un .mp3) avrete bisogno di guardare le specifiche in modo si analizza in modo corretto. Qui è un buon punto di partenza e non v'è ancora un po 'informazioni qui . Questo articolo sul CodeProject va ancora oltre ed estratti i tag ID3 pure come l'intestazione.

Questo sarà meglio che solo controllando che l'estensione è" .mp3" , ma è un sacco di lavoro extra per cui deve essere utile.

In realtà dipende dalla natura del vostro programma. Penso che se si è non lo sviluppo di un'applicazione relativo alla sicurezza, quindi è possibile utilizzare il semplice controllo di estensione.

No, perché estensione del file è semplicemente un indicatore, non è una guida affidabile per quanto il file è o contiene.

posso nominare i file musicali come mySong.zzz e sarà ancora giocare in Winamp. Quando si carica che si dovrebbe provare l'inizio del file per vedere se è davvero un mp3.

È anche possibile impostare un filtro sulla vostra finestra di dialogo file aperto in modo che consente solo all'utente di selezionare i file mp3:

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

Credo che il modo corretto per verificare effettivamente se si tratta di un file MP3 (questo richiede che il file deve essere aperto) è quello di cercare "numeri magici", sequenze di byte all'interno i dati binari che si verificano sempre. In questo caso, è possibile utilizzare il numero magico del tag ID3: i tag ID3v1 sono memorizzati negli ultimi 128 byte del file che iniziano con il byte "TAG" (esadecimale "544.147"), mentre i tag ID3v2 sono archiviati all'inizio del file , quindi i primi 3 byte del file sono "ID3" (esadecimale "494433"). Non so se l'MP3 telai stessi hanno numeri magici semplici come questo. Ovviamente, questo metodo richiede il file da aprire, che potrebbe rendere la scansione di un gran numero di file più lenti.

Se si vuole essere sicuri, caricare il file con questo http://sourceforge.net/projects / id3dotnet / fallirà con un'eccezione se non un mp3. È sufficiente creare un Id3.Net.Mp3File con il nome del file o il flusso nel costruttore di vedere se viene generata un'eccezione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top