• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:strcmp( finddata.cFileName, "." ))

finddata.cFileNameがドット以外の場合、どのように処理されるのですか?

このQ&Aのポイント
  • サイトに存在するソースコードには、finddata.cFileNameがドット以外の場合に実行される処理があります。
  • しかし、今のところ、finddata.cFileNameがドット以外になることはありません。
  • なので、その処理は常に実行されません。

質問者が選んだベストアンサー

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

>strcmp( finddata.cFileName, ".." ) >が偽になるのはどういう場合ですか? FindFirstFile()で「..」という親ディレクトリが見つかった場合です。 が、通常、「.」というカレントディレクトリが先に見つかりますので おこらないはずです。 しかし、プログラムの基本としては、起こりうる可能性があれば記述して おいた方が安全なのでそのようにします。 「.」や「..」はディレクトリなので、この判定がなければ、次の「………」に 処理が移ります。このとき、ディレクトリの場合は SearchDirFile()を再帰的に 呼び出しますので、「.」や「..」がこの処理にかかると無限ループに入って しまい致命的な問題となります。どんなことがあっても「.」や「..」の場合は 「………」の処理に入ってはいけないのです。 プログラミングにおいては、起こりうる可能性がある全ての場合に対して 安全に動作するように考慮すべきです。安易に「こうなるはずだ」と思って 特定の条件を省略するとバグの元になりますので注意した方がいいと思います。

A__
質問者

お礼

安全を考慮するとそうですね。 でもやっぱりそれは通常は起こらず、どのように試しても それになるのを確認することはできませんでした。 ありがとうございました。

その他の回答 (1)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

この処理は、指定のディレクトリで最初に見つかったファイル(orディレクトリ)の 判定部分ですよね。(2番目以降は、下の「次のファイルの検索」です) 通常サブディレクトリには、カレントディレクトリを現す「.]という ディレクトリが最初にありますのでそういう結果になっているんですね。 唯一違うのは、ルートディレクトリ(C:\など)の場合です。 MS-DOS(コマンド)プロンプトで、  DIR C:\WINDOWS|MORE と  DIR C:\|MORE の両方をやってみると雰囲気がわかるかもしれません。

A__
質問者

補足

ルートを指定したら、……… の部分の処理がされました。 詳しく調べてみると、それは finddata.cFileName が ルートに有るファイル名だった場合でした。 コメントの行位置で、finddata.cFileName が ファイル名になる場合と "." になる場合を確認できました。 ifのもう1つの条件の strcmp( finddata.cFileName, ".." ) が偽になるのはどういう場合ですか? 他のURLで、このように while( FindNextFile の手前で strcmp( finddata.cFileName, ".." ) と strcmp( finddata.cFileName, "." ) の2つの条件を調べているソースが有ればURLを教えてください。

関連するQ&A