9

クライアント/消費者が画像、オーディオ、またはビデオファイルをアップロードできるようにする単純な WCF サービスがあります。アップロード後、サービスはファイルを分析し、何らかの方法で次の属性を取得することになっています。

画像:幅、高さ、撮影日、使用プログラム

オーディオ: ランタイム、アーティスト、アルバム、ジャンル、ビットレート、発行年

ビデオ: ランタイム、幅、高さ、フレーム/秒、ビデオ ビットレート、オーディオ ビットレート

Windows ではこれらの属性を簡単に取得して表示できるようですが、C# ではどうすればよいのでしょうか?

4

2 に答える 2

7

このスレッドの礼儀。

これにより、拡張属性を含むすべてのファイル属性が取得されることを確認しました。

プロジェクトで、[参照の追加] -> [COM] -> [Microsoft Shell Controls and Automation] に移動します。

ディレクトリ内のファイルの属性を読み取るための C# メソッドを追加します。(特定のファイルでこの機能を実行できるかどうかはまだ調査中です。そうでない場合は、常に問題のファイル名を渡し、そのファイルの属性のみを取得することを確認できます。)

public static void Main(string[] args)
{
    List<string> arrHeaders = new List<string>();

    Shell32.Shell shell = new Shell32.Shell();
    Shell32.Folder objFolder;

    objFolder = shell.NameSpace(@"C:\temp\testprop");

    for( int i = 0; i < short.MaxValue; i++ )
    {
        string header = objFolder.GetDetailsOf(null, i);
        if (String.IsNullOrEmpty(header))
            break;
        arrHeaders.Add(header);
    }

    foreach(Shell32.FolderItem2 item in objFolder.Items())
    {
        for (int i = 0; i < arrHeaders.Count; i++)
        {
            Console.WriteLine("{0}\t{1}: {2}", i, arrHeaders[i], objFolder.GetDetailsOf(item, i));
        }
    }
}
于 2011-06-04T06:26:46.673 に答える
2

その情報にアクセスする最も簡単な方法は、(Explorer) シェルにそれを実行させ、( Windows プロパティ システムを介して) 要求することです。C# からこれを行う最も簡単な方法は、おそらくWindows API Code Pack for .NETを使用することです。

具体的には、Property Store へのアクセスを取得する必要があります。開始するためのヘルプについては、PropertiesEditDemo プロジェクトの Samples フォルダーを参照してください。

ファイルのすべてのメタデータを読み取ることで自分でそれを行うことができますが、問題は、プログラムが利用可能なすべてのファイル タイプの利用可能なすべてのメタデータを認識しなければならないことです。私は通常、その知識のためにシェルに固執することを好みます。

于 2011-06-04T06:29:34.957 に答える