3

シェルAPIを使用してFavoritesフォルダーを(再帰的に)列挙するコードがあります。この関数を使用して、GetAttributesOf見つけた各オブジェクトの属性を取得します。

私は上に進むことは決してないので、私が遭遇するすべてのアイテムはファイルシステムオブジェクトになることを期待しています。これはおそらくすべてのサブディレクトリに当てはまるわけではありませんが、問題のサブディレクトリには当てはまると確信しています。

私の自信にもかかわらず、属性にが含まれていることを確認しますSFGAO_FILESYSTEM。そうでない場合は、メッセージをログに記録してアイテムをスキップします。これは、自分の仕事ができる見込みがないためです。ロギングが表示されない、またはアイテムをスキップする必要がないことを期待していましたが、それが私がロールする方法であるため、とにかく検証を入れました。

数週間後、私の優秀なQAエンジニアは、私のプログラムが特定のアイテムに関して誤動作しているのを見て、その時間の前後に、そのアイテムにファイルシステムビットが設定されておらず、スキップしました。問題のアイテムは、信じるに足る理由があります。ファイルです。

私が最初にこの質問を書いたので、列挙内のいくつかのアイテムがファイルシステムアイテムではないと主張するケースを見てきました。トラブルは非常に短い時間続くようですが、半ダースものアイテムの旗を台無しにするのに十分な長さです。

ファイルがファイルシステムオブジェクトではないのはいつですか?

4

2 に答える 2

1

従来のファイルシステムを使用しているか NTFS を使用しているかは不明ですが、ファイルシステムのビットを破壊する可能性のあるものがいくつかあります。Vista ではシンボリック リンクが導入されました。これは通常のショートカットとは異なり、「クライアント側」を解析するためです。それらは、それ自体がファイルシステム オブジェクトとしてカウントされない場合があります。ディレクトリ再解析ポイントも同様です。SFGAO 列挙は、NTFS で何が起こっているかを完全に 1 対 1 で表現しているわけではないため、その情報は割り引いて考えてください。

また、不良ブロックが原因で、Windows がファイル システム ビットを一貫性のない状態で報告する可能性もあります。同じファイルがファイルシステムオブジェクトとして報告される場合と報告されない場合がある場合、それが唯一の説明になります。

于 2011-12-26T11:30:36.400 に答える
0

これを再帰的に行っていますか?

アーカイブ (zip や cab ファイルなど) にたどり着くと、ファイルシステム以外のオブジェクトが表示されます。

同様に、desktop.ini ファイルのあるディレクトリに降りると、ファイルシステム以外のオブジェクトが表示される場合があります (ただし、desktop.ini によって参照される COM オブジェクトが何を行うかによって異なります)。

どちらの場合でも、オブジェクトにファイルとしてアクセスしようとすると、アクセス拒否ではなく、見つからないというエラーが表示されることが予想されます。問題のあるオブジェクトに対するファイル システムのアクセス許可を持っていない可能性はありますか?

シンボリック リンクや再解析ポイントなどの NTFS 機能は、ファイル システム オブジェクトとして報告されるため、問題にはなりません。

于 2011-12-28T18:52:54.217 に答える