检查文件是否是C#中的媒体文件

Cor*_*nel 9 c#

我需要一种方法,可以告诉我文件是图像,音频还是视频文件.我可以用C#做​​到这一点吗?

SLa*_*aks 26

这取决于你想要的强大程度.

最简单的方法是检查扩展名,如下所示:

static string[] mediaExtensions = {
    ".PNG", ".JPG", ".JPEG", ".BMP", ".GIF", //etc
    ".WAV", ".MID", ".MIDI", ".WMA", ".MP3", ".OGG", ".RMA", //etc
    ".AVI", ".MP4", ".DIVX", ".WMV", //etc
};

static bool IsMediaFile(string path) {
    return -1 != Array.IndexOf(mediaExtensions, Path.GetExtension(path).ToUpperInvariant());
}
Run Code Online (Sandbox Code Playgroud)

编辑:对于那些真正想要LINQ的人来说,这里是:

return mediaExtensions.Contains(Path.GetExtension(path), StringComparer.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

请注意,文件的扩展名不是其内容的可靠指标; 任何人都可以重命名文件并更改其扩展名.

如果您没有扩展名,或者您不信任它,则可以阅读文件的开头,看它是否与常见媒体格式的文件签名相匹配.


小智 9

方法1:最简单 - 文件名解析.如果文件名匹配已知的媒体文件类型列表(即jpg gif wmv avi mp4等),则它匹配视频,音频或图像文件.这不是那么强大,因为我可以轻松地命名扩展名为.avi或.jpg的文本文件,但这并不一定使它成为媒体文件.

方法2:更难 - 解析文件头.例如,在CodeProject上有一个C#RIFF Parser或这个关于从JPEG图像中提取IPTC头信息的 CodeProject文章

你最终必须使用这两种方法的组合.您要问的大多数内容已经内置在.NET框架中.