파일이 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인지 확인하는 올바른 방법이 파일 이름의 끝을 보는 것인지 묻는 것 같습니다. 다른 사람들이 말했듯이, 그것에 대한 대답은 아니오입니다. Matt Warren의 게시물은 파일을보고 실제로 MP3 형식인지 확인하려면 도움이 될 수 있습니다.

그러나 Eran Betzalel의 답변에 대한 귀하의 의견은 일반적으로 파일 확장자를 확인하는 올바른 방법이 String.endswith ()를 사용하는 것인지 여부를 묻는 지 궁금합니다.

눈에 띄는 것은 endswith (string)가 대소 문자에 민감하다는 것입니다. 결과는 다음과 같습니다.

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

그리고

EndsWith("mP3")

모두 같은 대답을하지 마십시오. 더 나은 테스트는 다음과 같습니다.

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

당신이 관심을 갖는 것이 파일 내용이 아닌 파일 확장자입니다.

실제로 파일을 분석하려면 (실제로 .mp3인지 확인하려면) 사양을보고 올바르게 구문 분석해야합니다. 여기 시작하기에 좋은 곳이고 더 많은 정보가 있습니다. 여기. 이 기사 CodeProject에서는 더 나아가서 ID3 태그뿐만 아니라 헤더를 추출합니다.

이것은 확장이 ".mp3"인지 확인하는 것보다 낫지 만, 그것은 많은 추가 작업이므로 가치가 있어야합니다.

실제로 프로그램의 특성에 달려 있습니다. 나는 당신이라면 그렇게 생각합니다 ~ 아니다 보안 관련 응용 프로그램을 개발하면 간단한 확장 검사를 사용할 수 있습니다.

아니요, 파일 확장자는 단순한 표시기이므로 파일 내용이나 내용에 대한 신뢰할 수 있는 지침은 아닙니다.

내 음악 파일 이름을 다음과 같이 지정할 수 있습니다. mySong.zzz Winamp에서는 계속 재생됩니다.파일을 로드할 때 파일의 시작 부분을 샘플링하여 실제로 mp3인지 확인해야 합니다.

또한 사용자가 mp3 파일만 선택할 수 있도록 열린 파일 대화 상자에 필터를 설정할 수도 있습니다.

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

실제로 MP3 파일인지 확인하는 올바른 방법 (파일을 열어야 함)은 항상 발생하는 이진 데이터 내에서 "마술 번호", 바이트 시퀀스를 찾는 것입니다. 이 경우 ID3 태그의 마법 번호를 사용할 수 있습니다. ID3V1 태그는 바이트 "태그"(16 진수 "544147")로 시작하는 파일의 마지막 128 바이트에 저장되며 ID3V2 태그는 파일의 시작 부분에 저장됩니다. , 파일의 첫 3 바이트는 "id3"(16 진수 "494433")입니다. MP3 프레임 자체가 이와 같은 단순한 마법의 숫자가 있는지 모르겠습니다. 분명히이 방법을 사용하려면 파일을 열어야하므로 많은 파일을 스캔 할 수 있습니다.

확실히 원하시면이 lib로 파일을로드하십시오. http://sourceforge.net/projects/id3dotnet/ MP3가 아닌 경우 예외가 발생하지 않습니다. 제작자의 파일 이름 또는 스트림으로 ID3.net.mp3file을 작성하기 만하면 예외가 발생하는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top