新着記事一覧
タグ一覧
テーマ
ライト
ダーク
iPentec.com
/
Document
/
カテゴリ: C#
/
タグ:
C#
シェルネームスペース
目次
1
正しく取得できる場合
2
正しくない値が取得される場合
3
対策
3.1
完全PIDLを利用する場合
3.2
ファイルパスから属性を取得する場合
4
補足
完全PIDLを使用して IShellFolder.GetAttributesOf で属性を素得すると正しい属性値が取得できない
目次
1
正しく取得できる場合
2
正しくない値が取得される場合
3
対策
3.1
完全PIDLを利用する場合
3.2
ファイルパスから属性を取得する場合
4
補足
もっと見る
完全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を愛用
作成日: 2015-06-05
関連するページ
ファイル名・ファイルパスから シェルのアイコンを取得するコードと実行結果
IShellFolder.SetNameOf を利用してファイル名・オブジェクト名を変更する
エクスプローラースタイルのツリービュー(TreeView)とリストビュー(ListView)を連動させる
ファイル名・ファイルパスから 特大アイコン (48x48 256x256 ピクセル) を取得する
サイズの大きいZIPファイルの属性をIShellFolder.GetAttributesOf やSHGetFileInfo で取得すると時間がかかる
IEnumIDList.Next メソッドで取得した pidl を保持する - IEnumIDList.Next メソッドで取得した pidlを保持して利用するとメモリーアクセスエラーになる
ファイルパスから PIDL(シェルネームスペースITEM ID)を取得する
シェルネームスペースを利用して デスクトップ フォルダの情報を取得する
ドキュメント
新着記事一覧
タグ一覧
ドキュメント トップ
SNSコンテンツ
YouTube
Instagram
Pinterest
X
iPentec
iPentecについて
プライバシー
お問い合わせ
Copyright © 1995–2025 iPentec all rights reserverd.