Bei der Prüfung, ob eine Datei MP3 wird der Dateiname Zeichenfolge mit einem .EndsWith gut genug überprüft?

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich tue dies:

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

    }

Gibt es eine bessere Art und Weise Dateitypen zu prüfen oder bin ich es richtig tun?

War es hilfreich?

Lösung

die Erweiterung .mp3 bedeutet nicht, es ist ein mp3, aber nicht mit ihm ist ein (akzeptabel) Hinweis darauf, dass es nicht ist.

An einem gewissen Punkt werden Sie einige API aufrufen, um die Datei zu spielen, und es wird scheitern. Wenn ja, wissen Sie, es nicht eine spielbare Datei ist. So stellen Sie sicher, dass Sie mit einem paar anständigen UI behandeln, dass.

Andere Tipps

Ihre Frage scheint, wenn der richtige Weg, wenn eine Datei MP3 zu überprüfen, um zu fragen, ist am Ende des Dateinamen zu suchen. Wie andere gesagt haben, ist die Antwort auf diese Frage nicht. Matt Warren Post können Ihnen helfen, wenn Sie in die Datei suchen wollen, um zu sehen, ob es tatsächlich mp3-Format ist.

Aber Ihr Kommentar zu Eran Betzalel Antwort macht mich fragen, ob Sie fragen im Allgemeinen, ob der richtige Weg, um eine Dateierweiterung zu prüfen ist String.EndsWith () zu verwenden.

Eine Sache zu bemerken ist, dass EndsWith (string) ist case-sensitive, so die Ergebnisse:

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

und

EndsWith("mP3")

geben Sie nicht alle die gleiche Antwort. Ein besserer Test könnte sein:

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

, wenn alles, was Sie interessiert, ist die Dateierweiterung und nicht der Inhalt der Datei.

Wenn Sie die Datei tatsächlich analysieren wollen (um zu überprüfen, ob es wirklich ein .mp3 ist) müssen Sie in der Beschreibung sehen, so dass Sie es richtig analysieren. Hier ist ein guter Anfang, und es gibt einige weitere Informationen hier . diesem Artikel auf der Codeproject geht sogar noch weiter und extrahiert ID3-Tags als auch wie die Kopfzeile.

Dies wird besser sein als nur die Überprüfung, dass die Erweiterung“.mp3" , aber es ist eine Menge zusätzlicher Arbeit, so dass es sich lohnt sein.

Es hängt wirklich von der Art des Programms. Ich glaube, dass, wenn Sie nicht , um eine sicherheitsrelevante Anwendung entwickelt, dann können Sie die einfache Erweiterung Prüfung verwenden.

Nein

, weil Dateierweiterung einfach ein Indikator ist, es ist nicht zuverlässig, was die Datei ist oder enthält.

kann ich mich Musikdateinamen als mySong.zzz und es wird in Winamp noch spielen. Wenn Sie es laden, sollten Sie den Anfang der Datei abtasten, um zu sehen, ob es wirklich ein mp3 ist.

Sie können auch einen Filter setzen auf Datei-Dialog, so dass es nur den Benutzer erlaubt MP3-Dateien zu wählen:

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

ich die richtige Art und Weise erraten, um tatsächlich zu überprüfen, ob es sich um eine MP3-Datei ist (dies erfordert, dass die Datei geöffnet) ist für „magischen Zahlen“ zu suchen, Sequenzen von Bytes innerhalb der binären Daten, die immer auftreten. In diesem Fall können Sie die ID3-Tag-Magie-Nummer verwenden: ID3v1-Tags in dem letzten 128 Bytes der Datei gespeichert sind, mit dem Bytes „TAG“ (hexadezimal „544147“) beginnen, während ID3v2-Tags am Anfang der Datei gespeichert sind, , so dass der erste 3 Bytes der Datei ist "ID3" (hexadezimal "494433"). Ich weiß nicht, ob die MP3 selbst Zahlen einfacher Zauberrahmen haben wie diese. Offensichtlich ist diese Methode erfordert, um die Datei zu öffnen, die einen Scan einer großen Anzahl von Dateien langsamer machen könnten.

Wenn Sie sicher sein wollen, laden Sie die Datei mit diesem lib http://sourceforge.net/projects wenn nicht ein mp3 / id3dotnet / wird es mit einer Ausnahme fehlschlagen. eine Id3.Net.Mp3File mit Dateinamen oder Stream im Konstruktor Erstellen Sie einfach ein sehen, ob es eine Ausnahme

wirft
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top