動画ファイルの時間数を取得する
ベテランの方にとっては非常に稚拙と思われますが、
VB.NETで動画ファイルの時間数を取得する方法。
取得できる情報はWindowsエクスプローラーにてファイルのプロパティの概要タブで確認できる内容です。
※Exif情報とは異なるものです。
①参照設定の追加より[COM]→[Microsoft Shell Controls And Automation]を追加する。
②ソースに「Imports Shell32」を追記
以下のモジュールを作成してみました。
Public Function getFileTime() As string
Dim sTime As String = "" '動画ファイルの時間
Dim Dir as string = [ディレクトリ]
Dim FileName as string = [ファイル名]
'ShellClassクラスのインスタンス生成
Dim sh As New Shell
'FolderItemインターフェイス
Dim fItem As FolderItem = Nothing
Dim fInfo As FileInfo = New FileInfo(Dir & "\" & FileName)
'Folderインターフェイス
Dim f As Folder = sh.NameSpace(fInfo.DirectoryName)
fItem = f.ParseName(fInfo.Name)
'OS判定して、XP以前とインデックス区別
(XPはMajor:5 Minor:1、7はMajor:6 Minor:1、8はMajor:6 Minor:2)
Dim index As Integer = 0
Dim os As System.OperatingSystem = System.Environment.OSVersion
If os.Version.Major < 6 Then
index = 21
Else
index = 27
End If
sTime = f.GetDetailsOf(fItem, index) ' 長さが格納されたインデックス
End Function
f.GetDetailsOf(fItem, index)の部分で動画の時間を取得します。
厄介なのがOSが新旧OSでインデックスが違うこと。
まだクライアントにはXPがゴロゴロしているので、仕込んでおく必要がありました
OSの判定については
OSのバージョンを取得する、OSの種類を判別する: .NET Tips: C#, VB.NET
を参考にしました。