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

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

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

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

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()); } 

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

 return mediaExtensions.Contains(Path.GetExtension(path), StringComparer.OrdinalIgnoreCase); 

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

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

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

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

你最终必须使用这两种方法的组合。 您提出的大部分内容已经内置在.NET框架中。

是的,你可以,但除非你使用组件来做它,你需要编写代码,至少加载这些文件的标题,以检查它们是否没有损坏。 如果文件以可靠的方式存储,您可以只检查其文件扩展名

 foreach(string file in Directory.GetFiles("c:\\MyDir\\") { if(file.EndsWith("jpg", false, null)) //treat as image file else if(file.EndsWith("avi", false, null)) //treats as avi video //and so on } 

您始终可以检查文件扩展名。