ファイルがMP3であるかどうかをチェックする場合には十分ではあり.EndsWithでファイル名の文字列をチェックしていますか?

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

  •  19-09-2019
  •  | 
  •  

質問

私はこれをやってます:

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

    }

ファイルの種類を確認するか、私はそれを正しい方法でやっているのより良い方法はありますか?

役に立ちましたか?

解決

.MP3拡張子を持つことがmp3であるが、それはそれがないこと(許容される)の指標である持っていないという意味ではありません。

いくつかの時点では、ファイルを再生するには、いくつかのAPIを呼び出しますし、それが失敗します。それがないとき、あなたはそれが再生可能なファイルはありません知っています。だから、あなたもいくつかのまともなUIとそれを扱うことを確認してください。

他のヒント

あなたの質問は、ファイルがMP3であるかどうかを確認する正しい方法は、ファイル名の末尾を見ているかどうか尋ねるようです。他の人が言ったように、その答えはノーです。あなたはそれが実際にmp3形式であるかどうかを確認するために、ファイルの中に見たい場合はマット・ウォーレンの記事はあなたを助けることができます。

しかし、エランBetzalelの答えにあなたのコメントは、ファイルの拡張子を確認するための正しい方法はString.EndsWith()を使用するかどうかを一般的に求めているなら、私は思ってしまう。

注意すべきことの一つは、EndsWith(文字列)は大文字と小文字が区別されることがあるので、結果

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

EndsWith("mP3")

すべて同じ答えを与えることはありません。より良いテストは次のようになります。

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

あなたが気にすべてのファイルの拡張子ではなく、ファイルの内容である場合。

あなたが実際にファイルを分析する場合(それは本当に.MP3があるかどうかをチェックするために)あなたが正しくそれを解析して仕様書を見てする必要があります。 ここを開始するには良い場所であり、いくつかの詳細は、をhttp://mpgedit.org/mpgedit/mpeg_format/MP3Format.html」のrel = "nofollowをnoreferrer">。 CodeProjectの上のこの記事ではさらに進んで、同様ID3タグを抽出し、ヘッダとして

これは単に拡張子が」.MP3" であることをチェックするよりも良いだろうが、それは価値がなければならないので、それは余分な作業の多くのです。

それは本当にあなたのプログラムの性質に依存します。私はあなたがいないのであればのセキュリティ関連のアプリケーションを開発し、その後、あなたは単純な拡張性チェックを使用することができると思います。

ファイルの拡張子は、単に指標であるため、

いいえ、それはファイルであるか、または含まれているものに信頼性の高いガイドではありません。

私はのmySong.zzz のよう私の音楽ファイルに名前を付けることができますし、それはまだWinampの中で再生されます。あなたはそれをロードするとき、あなたはそれが本当にmp3であるかどうかを確認するために、ファイルの先頭をサンプリングする必要があります。

それが唯一のユーザーはmp3ファイルを選択することができますように

また、あなたのファイルを開くダイアログにフィルタを設定することができます:

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

私は(これは、ファイルが開かれている必要があり)、それはMP3ファイルだ場合、実際にチェックするために適切な方法を推測する「マジックナンバー」、常に発生バイナリデータ内のバイトのシーケンスを探すことです。このケースでは、ID3タグのマジックナンバーを使用することができます。ID3v2のタグは、ファイルの先頭に保存されている間はID3v1タグは、バイト「TAG」(16進「544147」)で始まるファイルの最後の128バイトに格納されていますので、ファイルの最初の3つのバイトは、「ID3」(16進数「494433」)です。 MP3自身がこのような単純なマジックナンバーを持っているフレームかどうかは知りません。明らかに、この方法は遅く、大量のファイルのスキャンを行う可能性がある、オープンするファイルを必要とします。

あなたが確認したい場合は、このLIB http://sourceforge.net/projects / id3dotnet / にそれは例外ではないにmp3で失敗します。単にコンストラクタでファイル名またはストリームとId3.Net.Mp3Fileを作成ANに例外をスローするかどうかを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top