我需要一种可以告诉我文件是图像,音频还是视频文件的方法。我可以用C#做到这一点吗?
答案 0 :(得分:25)
这取决于你想要的强大程度。
最简单的方法是检查扩展名,如下所示:
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 :(得分:9)
方法1:最简单 - 文件名解析。如果文件名匹配已知的媒体文件类型列表(即jpg gif wmv avi mp4等),则它匹配视频,音频或图像文件。这不是那么强大,因为我可以轻松地命名扩展名为.avi或.jpg的文本文件,但这并不一定使它成为媒体文件。
方法2:更难 - 解析文件头。例如,在CodeProject上C# RIFF Parser
上有Extracting IPTC header information from JPEG images或此CodeProject文章你最终必须使用这两种方法的组合。您提出的大部分内容已经内置在.NET框架中。
答案 2 :(得分:2)
是的,除非您使用组件来执行此操作,否则您需要编写代码以至少加载这些文件的标头以检查它们是否已损坏。如果文件以可靠的方式存储,您可以只检查其文件扩展名
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
}
答案 3 :(得分:0)
您始终可以检查文件扩展名。
答案 4 :(得分:0)
此代码验证文件是否为媒体文件。 from pdf2image import convert_from_path
pages = convert_from_path('sample.pdf', 500) # I have tried with full path, and with different num of pages
一系列知名的媒体文件扩展名。 pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?
和mediaExtensions
方法的组合提取文件扩展名。然后path.Substring
告诉提取的扩展名是否与path.IndexOf
数组的任何元素匹配。如果不是,则Array.IndexOf
返回mediaExtensions
(未找到),导致Array.IndexOf
返回-1
。否则,IsMediaFile
返回匹配项的数组索引,这意味着找到了媒体文件扩展名,而false
返回了Array.IndexOf
。
IsMediaFile