C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 119 を表示中)
■70009 / )  Re[1]: CFileFindとCFile::GetStatus()
□投稿者/ とっちゃん (195回)-(2014/02/17(Mon) 17:50:02)
とっちゃん さんの Web サイト
No70008 (nobb さん) に返信
> 私はMFCでファイルの存在判定を行うする際は「CFileFindクラス」を使用するようにしていますが、
> その昔書かれたソースではGetStatus関数で判定しているようなのです。
> 例:
>  CFileStatus status;
>  if(CFile::GetStatus(path, status)
>  {
>   //何か処理
>   //statusは未使用
>  }
>
CFileFind クラスと、CFileStatus クラスはいずれもMFCのクラスです。

CFileFind は、FindFirstFile/FindNextFile API をラップしたもので、
CFile::GetStatus() は、GetFileAttributesEx API をラップしたものです。
(CFileStatus は、WIN32_FILE_ATTRIBUTE_DATA 構造体のMFC焼き直し版のようなもの)

どちらがいいか(あるいは、直接APIを呼び出すのがいいか)と問われると
ファイルの存在チェックのために使うのであれば、無駄が多すぎるので
GetFileAttributes API か、PathFileExists APIのどちらかの利用をお勧めします。

ちなみに、私自身は、ファイルの存在チェックだけなら、
GetFileAttributes API か、PathFileExists API のどちらかを使います。
どちらを使うかは文脈に依存しますが、
基本的に、存在チェックと合わせて属性も使う場合は前者
そうではなく純粋な存在チェックだけなら後者という場合が多いです。
(ただし、状況によってはshlwapiを使いたくないという状況もあるため、あえて前者を選ぶ場合もあります)。


> これは何かメリットがあるのでしょうか?
>
メリットについては、デメリットも合わせて考慮するとどうするのがよいか?が見えてきます。
また、そのクラスやメソッドが何をするものか?も含めて複合的に判断する必要がある場合が多いです。

今回のような単純なものの場合、より簡素な判定方法がないか?という部分も考慮するほうがいいので
結果としては、第三の選択肢が最もメリットがあるということになりますけどw

返信 編集キー/


管理者用

- Child Tree -