Lors de la vérification si un fichier est MP3 vérifie la chaîne de nom de fichier avec un assez bon .EndsWith?

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

  •  19-09-2019
  •  | 
  •  

Question

Je fais ceci:

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

    }

Y at-il une meilleure façon de vérifier les types de fichiers ou que je fais de la bonne façon?

Était-ce utile?

La solution

vu l'extension .mp3 ne signifie pas que ce soit un mp3, mais ne pas l'avoir est une indication (acceptable) qu'il n'y a pas.

À un certain moment, vous appeler une API pour lire le fichier, et il échouera. Quand il le fait, vous savez que ce n'est pas un fichier jouable. Donc, assurez-vous gérer cela avec un peu trop UI décent.

Autres conseils

Votre question semble demander si la bonne façon de vérifier si un fichier est MP3 est de regarder la fin du nom de fichier. Comme d'autres l'ont dit, la réponse est non. Le poste de Matt Warren peut vous aider si vous voulez regarder dans le fichier pour voir si elle est en fait le format mp3.

Mais votre commentaire sur la réponse de Betsalel Eran me demande si vous demandez généralement si la bonne façon de vérifier une extension de fichier est d'utiliser String.EndsWith ().

Une chose à noter est que EndsWith (string) est sensible à la casse, de sorte que les résultats de:

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

et

EndsWith("mP3")

ne donnent pas tous la même réponse. Un meilleur test pourrait être:

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

si tout ce que vous aimez est l'extension de fichier et non le contenu du fichier.

Si vous voulez vraiment analyser le fichier (pour vérifier si elle est vraiment un .mp3), vous aurez besoin de regarder la spécification de sorte que vous l'analyser correctement. est un bon endroit pour commencer et il y a un peu plus d'info ici . Cet article sur la CodeProject va encore plus loin et extraits balises ID3 ainsi comme en-tête.

Ce sera mieux que simplement vérifier que l'extension est » .mp3" , mais il y a beaucoup de travail supplémentaire de sorte qu'il doit être utile.

Cela dépend vraiment de la nature de votre programme. Je pense que si vous êtes pas développement d'une application liée à la sécurité, vous pouvez utiliser la simple vérification d'extension.

Non, parce que l'extension de fichier est tout simplement un indicateur, il est un guide fiable pour ce que le fichier est ou contient.

Je peux nommer i fichier de musique comme mySong.zzz et il va encore jouer dans Winamp. Lorsque vous chargez vous devez goûter le début du fichier pour voir si elle est vraiment un mp3.

Vous pouvez également définir un filtre sur votre boîte de dialogue de fichier ouvert afin qu'il ne permet à l'utilisateur de sélectionner les fichiers mp3:

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

Je suppose que la bonne façon de vérifier effectivement si c'est un fichier MP3 (cela nécessite que le dossier soit ouvert) est de chercher des « nombres magiques », des séquences d'octets dans les données binaires toujours se produire. Dans ce cas, vous pouvez utiliser le numéro magique de la balise ID3: les balises ID3v1 sont stockées dans les 128 derniers octets du fichier commençant par les octets « TAG » (hexadécimal « 544147 »), tandis que les balises ID3v2 sont stockés au début du fichier , de sorte que les 3 premiers octets du fichier sont « ID3 » (hexadécimal « 494433 »). Je ne sais pas si le MP3 se cadres ont des numéros simples magiques comme celui-ci. De toute évidence, cette méthode nécessite le fichier à ouvrir, ce qui pourrait faire une analyse d'un grand nombre de fichiers plus lents.

Si vous voulez être sûr, charger le fichier avec cette lib http://sourceforge.net/projects / id3dotnet / il échouera avec une exception sinon un mp3. Il suffit de créer un nom de fichier ou Id3.Net.Mp3File avec flux dans le constructeur d'un voir si elle renvoie une exception

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top