新着記事一覧
タグ一覧
テーマ
ライト
ダーク
iPentec.com
/
Doc
/
C#
/
シェルネームスペース
目次
1
正しく取得できる場合
2
正しくない値が取得される場合
3
対策
3.1
完全PIDLを利用する場合
3.2
ファイルパスから属性を取得する場合
4
補足
完全PIDLを使用して IShellFolder.GetAttributesOf で属性を素得すると正しい属性値が取得できない - C#
完全PIDLを使用して IShellFolder.GetAttributesOf で属性を取得すると、正しく属性値が取得できないことがあります。
正しく取得できる場合
デスクトップ直下のフォルダ
正しくない値が取得される場合
PC(マイコンピュータ)以下のフォルダ
対策
完全PIDLを利用する場合
完全PIDLではなく相対PIDLを利用して一つ上位のフォルダのIShellFolderのGetAttributesOf メソッドを利用して属性を取得すると正しい属性値が取得できるようです。
もしくはSHGetFileInfo() APIを利用すれば、完全PIDLから正しい属性値が取得できます。
ファイルパスから属性を取得する場合
IShellFolder.ParseDisplayName() メソッドでPIDLを取得し、取得したPIDLを利用して、IShellFolder.GetAttributesOf() を呼び出すと正しい属性が取得できないことがあります。
この場合は、IShellFolder.ParseDisplayName() メソッド呼び出し時の第6引数のOutを利用すると正しい属性値が取得できます。
または、一つ上位のフォルダのIShellFolderを取得し、そのIShellFolderのParseDisplayName()メソッドに相対パスを与えて取得したPIDLを利用してIShellFolder.GetAttributesOf() を呼び出すと正しい属性値が取得できますが、ParseDisplayName()メソッドに相対パスを与えるのは本来の仕様では許可されていないため、あまりお勧めできません。
補足
上記の方法で正しく属性を取得できるようになった場合、大きなサイズ(100MB以上)、ファイル数の多い(1000ファイル以上)のZIPファイルの属性取得で時間がかかる場合があります。もしくはタイムアウトして例外が戻る場合があります。
詳細は「
サイズの大きいZIPファイルの属性をIShellFolder.GetAttributesOf やSHGetFileInfo で取得すると時間がかかる
」の記事を参照してください。
著者
Penta
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
関連するページ
エクスプローラースタイルでフォルダをツリー表示をすツリービュー(TreeView)の実装 (Explorer TreeView)
ファイル名・ファイルパスから 特大アイコン (48x48 256x256 ピクセル) を取得する
シェルネームスペースを利用して デスクトップ フォルダのサブフォルダ (子フォルダ)の一覧を取得する
エクスプローラースタイルのツリービュー(TreeView)とリストビュー(ListView)を連動させる
SHGetFileInfo を利用してファイルの情報を取得する
IEnumIDList.Next メソッドで取得した pidl を保持する - IEnumIDList.Next メソッドで取得した pidlを保持して利用するとメモリーアクセスエラーになる
シェルネームスペースを利用して デスクトップ フォルダの情報を取得する
システムイメージリストの作成と利用
掲載日: 2015-06-05
ドキュメント
新着記事一覧
タグ一覧
ドキュメント トップ
SNSコンテンツ
YouTube
Instagram
Pinterest
X
iPentec
プライバシー
iPentecについて
iPentec all rights reserverd.