当检查如果一个文件被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播放),你需要看看说明书,所以你正确地解析它。 这里是一个良好的开端,并有一些更多的信息的此处在CodeProject上的这篇文章走得更远,并提取ID3标签,以及作为标题。

这将不仅仅是检查的扩展名是” .MP3" 更好,但它是一个很多额外的工作,所以它是值得的。

这真的取决于你的程序的性质。我认为,如果你的不可以开发安全相关的应用程序,那么你可以使用简单的延伸检查。

没有,因为文件扩展名是一个简单的指标,它是不可靠的指导,以什么文件是或含有

我的名字,我的音乐文件的 mySong.zzz 的,它仍然会在Winamp播放。当您加载它,你应该品尝的文件的开头,看它是否真的是一个MP3。

您还可以设置您打开文件对话框的过滤器,使其只允许用户选择MP3文件:

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

我想用正确的方法实际上是检查它是否是一个MP3文件(这需要该文件被打开)是寻找“幻数”,总是会出现的二进制数据中的字节序列。在这种情况下,你可以使用ID3标签的幻数:ID3v1的标签存储在最后的128个字节的文件的开头字节“TAG”(十六进制“544147”),而ID3v2标签都存储在文件的开头,所以第3个字节的文件是“ID3”(十六进制数“494433”)。我不知道,如果MP3帧本身具有简单的幻数是这样的。显然,这种方法需要要打开的文件,这可能使大量文件慢的扫描。

如果您希望确保,加载文件与此LIB http://sourceforge.net/projects / id3dotnet / 它将失败的异常,如果没有一个MP3。简单地在构造函数创建具有文件名或流中的一Id3.Net.Mp3File看它是否会引发异常

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top