在 C# 中访问媒体文件的 shell 属性 "Length"(又名持续时间)
Access a media file's shell property "Length" (aka Duration) in C#
我注意到在 windows 7 中每个媒体文件的 shell 属性中,视频文件的持续时间实际上称为 "length"。任何人都知道使用 shell?
访问长度 属性 的快速方法
所以我找到了一种访问媒体文件的 "Length" shell 属性 或任何 shell 属性 的非常简短快捷的方法这很重要,只要您知道 属性.
的等效索引号
首先,您需要在项目中添加对 shell32 的引用,如下所示:
右击项目
单击添加引用
单击“添加引用”中的 .COM 选项卡 window
Select 微软 Shell 控制与自动化
点击确定
然后在代码隐藏中添加 using Shell32;。
现在您可以使用 GetDetailsOf() 方法在 foreach 循环中提取文件夹中每个媒体文件的长度 属性:
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" 中以 ##:##:## 格式获得了媒体文件的持续时间。
希望对您有所帮助!
干杯!
我试过上面的代码 Windows 10 21H1 build 19043.1165 和 VS 2012 with .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();
以上代码读取了Input Video文件的Media creation。
我注意到在 windows 7 中每个媒体文件的 shell 属性中,视频文件的持续时间实际上称为 "length"。任何人都知道使用 shell?
访问长度 属性 的快速方法所以我找到了一种访问媒体文件的 "Length" shell 属性 或任何 shell 属性 的非常简短快捷的方法这很重要,只要您知道 属性.
的等效索引号首先,您需要在项目中添加对 shell32 的引用,如下所示:
右击项目
单击添加引用
单击“添加引用”中的 .COM 选项卡 window
Select 微软 Shell 控制与自动化
点击确定
然后在代码隐藏中添加 using Shell32;。 现在您可以使用 GetDetailsOf() 方法在 foreach 循环中提取文件夹中每个媒体文件的长度 属性:
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" 中以 ##:##:## 格式获得了媒体文件的持续时间。
希望对您有所帮助! 干杯!
我试过上面的代码 Windows 10 21H1 build 19043.1165 和 VS 2012 with .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();
以上代码读取了Input Video文件的Media creation。