稚拙な備忘録ですが

へなちょこプログラマやっています。皆さんみたいなしっかりした備忘録は書けませんが宜しくお願いします。

動画ファイルの時間数を取得する

ベテランの方にとっては非常に稚拙と思われますが、

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

を参考にしました。