DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイルプロパティ数の取得

環境/言語:[[OS : Windows 7 / 言語 : C# / .NET Framework : 3.5]]
分類:[.NET]

現在Word、Excelのファイルプロパティを取得するプログラムを作っています。
Shell32.Folderを使用してファイルプロパティは取得できるのですが
ファイルプロパティ数が取得できないため何をもって終了とするかを悩んでいます。
以下2点のどちらかが解れば解決できるので、
どちらかの方法をご教授お願いします。
(1)ファイルのプロパティ数の取得
(2)ファイルのプロパティを指定して取得
 例えばGetDetailsOf(item, "更新時間");のような感じ


【参考:現状のプログラム】
ShellClass shell = new ShellClass();
Folder f = shell.NameSpace(dir);
FolderItem item = f.ParseName(file);
for(int i=0;i < 300;i++) //暫定で300
Console.WriteLine(f.GetDetailsOf(item, i));
■No31280に返信(あおきさんの記事)
>  例えばGetDetailsOf(item, "更新時間");のような感じ

[更新時間] というのが [更新日時]の意味で良いのであれば、
 Console.WriteLine(f.GetDetailsOf(Type.Missing, 3) + "=" + f.GetDetailsOf(item, 3));
とか。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb787870%28vs.85%29.aspx
■No31281に返信(魔界の仮面弁士さんの記事)
> ■No31280に返信(あおきさんの記事)
>>  例えばGetDetailsOf(item, "更新時間");のような感じ
>
> [更新時間] というのが [更新日時]の意味で良いのであれば、
>  Console.WriteLine(f.GetDetailsOf(Type.Missing, 3) + "=" + f.GetDetailsOf(item, 3));
> とか。
> http://msdn.microsoft.com/en-us/library/windows/desktop/bb787870%28vs.85%29.aspx

ご回答ありがとうございます。

現状取得したいデータはプロパティ内 説明の分類項目となっています。
例に関係ない項目を記載してしまい申し訳ありません。

但し、上記以外のプロパティもGUIから指定して取得できるように作成したい
と考えております。

参考に貼っていただいたページにてColumnの4以降を指定した場合
何が返ってくるかがはっきりすれば対応が可能なのですが
参考になるサイトがございましたらご教授お願いします。
2013/01/30(Wed) 16:10:37 編集(投稿者)

■No31282に返信(あおきさんの記事)
> 上記以外のプロパティもGUIから指定して取得できるように作成したい
f.GetDetailsOf(Type.Missing, i) する際に、i の値を 0〜299 と
固定値にするのではなく、「文字列が返される限りは i++ する」ことで
全ての項目を列挙できるかと思います。


> 参考に貼っていただいたページにてColumnの4以降を指定した場合
> 何が返ってくるかがはっきりすれば対応が可能なのですが

後続の番号は一定しません。XP と Vista など、OS によって
番号が変わることもありますので、タイトルテキストから
内容を判断してください。

なお、シェルエクスション次第では、標準にないオリジナルの項目が
追加されるケースさえあります。たとえば下記をインストールすると、
GetDetailsOf に指定される番号がずれることになります。
http://www.forest.impress.co.jp/lib/sys/wincust/explrextn/foldersize.html


Shell32 以外の方法で取得するとしたら、Dsofile.dll を用いるか、あるいは
OLE構造化ストレージからドキュメント プロパティにアクセスするか…。
http://support.microsoft.com/kb/224351/ja
http://atata.sakura.ne.jp/net/
■No31283に返信(魔界の仮面弁士さんの記事)
> 2013/01/30(Wed) 16:10:37 編集(投稿者)
>
> ■No31282に返信(あおきさんの記事)
>>上記以外のプロパティもGUIから指定して取得できるように作成したい
> f.GetDetailsOf(Type.Missing, i) する際に、i の値を 0〜299 と
> 固定値にするのではなく、「文字列が返される限りは i++ する」ことで
> 全ての項目を列挙できるかと思います。
>
>
>>参考に貼っていただいたページにてColumnの4以降を指定した場合
>>何が返ってくるかがはっきりすれば対応が可能なのですが
>
> 後続の番号は一定しません。XP と Vista など、OS によって
> 番号が変わることもありますので、タイトルテキストから
> 内容を判断してください。
>
> なお、シェルエクスション次第では、標準にないオリジナルの項目が
> 追加されるケースさえあります。たとえば下記をインストールすると、
> GetDetailsOf に指定される番号がずれることになります。
> http://www.forest.impress.co.jp/lib/sys/wincust/explrextn/foldersize.html

ご回答ありがとうございます。
GetDetailsOfでは取得場所を特定するのは難しいのですね。

> Shell32 以外の方法で取得するとしたら、Dsofile.dll を用いるか、あるいは
> OLE構造化ストレージからドキュメント プロパティにアクセスするか…。
> http://support.microsoft.com/kb/224351/ja
> http://atata.sakura.ne.jp/net/
DSOFile.dllを使用して目的のデータを取得出来ました。

DSOFile.OleDocumentProperties m_oDocument = new DSOFile.OleDocumentProperties();
m_oDocument.Open(FilesPath, false, DSOFile.dsoFileOpenOptions.dsoOptionOpenReadOnlyIfNoWriteAccess);

DSOFile.SummaryProperties item = m_oDocument.SummaryProperties;
Console.WriteLine(item.Category);
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板