フォルダ内にあるMedia の再生時間を取得する(C#/WindowsAPICodePack)
特定のフォルダ内にあるメディア(MP3とかAVIとか)ファイルの再生時間を取得する方法のメモ
動作環境
- OS : Windows 10 64bit
- .NET Framework : 4.6
- Visual Studio : 2015 Enterprise
WindowsAPICodePack は、以下の方法でインストールします。 www.nuget.org
以下、サンプルです。
var files = Directory.GetFiles(@"C:\work\"); foreach (var file in files) { using (var shell = ShellObject.FromParsingName(file)) { var property = shell.Properties.System.Media.Duration; if (property?.ValueAsObject != null) { var time = (ulong)property.ValueAsObject; Console.WriteLine($"{Path.GetFileName(file)} 再生時間[{TimeSpan.FromTicks((long)time)}]"); } else { Console.WriteLine($"{Path.GetFileName(file)} 該当プロパティなし。"); } } }
ShellObject.FromParsingName でファイルの情報を取得し、Properties.System.Media.Duration で該当プロパティの値を取得します。 注意しなければならないのは、ファイルに再生時間(Duration)プロパティが無い場合は、Properties.System.Media.Duration がnull になります。 また、ファイルが破損していたりして再生時間が記録されていない場合は、Properties.System.Media.Duration.ValueAsObject がnull になります。