在 C# 中访问媒体文件的外壳属性“长度”(又名持续时间)
Posted
技术标签:
【中文标题】在 C# 中访问媒体文件的外壳属性“长度”(又名持续时间)【英文标题】:Access a media file's shell property "Length" (aka Duration) in C# 【发布时间】:2015-11-08 12:41:18 【问题描述】:我注意到,在 Windows 7 中每个媒体文件的外壳属性中,视频文件的持续时间实际上称为“长度”。有人知道使用 shell 访问 length 属性的快速方法吗?
【问题讨论】:
【参考方案1】:所以我找到了一种访问媒体文件的“长度”外壳属性或任何外壳属性的非常简单快捷的方法,只要您知道该属性的等效索引号。
首先你需要在你的项目中添加一个对 shell32 的引用,如下所示:
右键项目
点击添加参考
在添加参考窗口中单击 .COM 选项卡
选择 Microsoft Shell 控件和自动化
点击确定
然后在您的代码隐藏中添加 using Shell32;。 现在,您可以在 foreach 循环中使用 GetDetailsOf() 方法提取文件夹中每个媒体文件的长度属性:
string[] supportedExtensions = new[] ".mov", ".mp4", ".avi", ".mpeg", ".mpg", ".wmv", ".mkv", ".m4v", ".flv" ;
var allFiles = Directory.GetFiles(SelectedFolderPath, "*.*", SearchOption.TopDirectoryOnly).Where(s => supportedExtensions.Contains(System.IO.Path.GetExtension(s).ToLower()));
foreach (string name in allFiles)
Shell shell = new Shell();
Folder rFolder = shell.NameSpace(@SelectedFolderPath);
FolderItem rFiles = rFolder.ParseName(System.IO.Path.GetFileName(name));
string videosLength = rFolder.GetDetailsOf(rFiles, 27).Trim();
其中,“SelectedFolderPath”应该是您希望扫描的文件夹,而您在 GetDetailsOf 方法中作为参数看到的数字 27 是“Length”Shell 属性的索引号。
所以现在您在字符串“videosLength”中以##:##:## 格式获得了媒体文件的持续时间。
希望这会有所帮助! 干杯!
【讨论】:
【参考方案2】:我已经为 Windows 10 21H1 build 19043.1165 和 VS 2012 尝试了上面的代码 .Net 4.5 上面不会直接编译下面的代码修改版本就可以了。
Shell32.Shell sh = new Shell32.Shell();
Shell32.Folder rFolder = sh.NameSpace(SelectedFolderPath);
Shell32.FolderItem rFiles = rFolder.ParseName(System.IO.Path.GetFileName(name));
string videosLength = rFolder.GetDetailsOf(rFiles,208).Trim();
以上代码读取了输入视频文件的媒体创建。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于在 C# 中访问媒体文件的外壳属性“长度”(又名持续时间)的主要内容,如果未能解决你的问题,请参考以下文章