- ベストアンサー
finddata.cFileNameがドット以外の場合、どのように処理されるのですか?
- サイトに存在するソースコードには、finddata.cFileNameがドット以外の場合に実行される処理があります。
- しかし、今のところ、finddata.cFileNameがドット以外になることはありません。
- なので、その処理は常に実行されません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>strcmp( finddata.cFileName, ".." ) >が偽になるのはどういう場合ですか? FindFirstFile()で「..」という親ディレクトリが見つかった場合です。 が、通常、「.」というカレントディレクトリが先に見つかりますので おこらないはずです。 しかし、プログラムの基本としては、起こりうる可能性があれば記述して おいた方が安全なのでそのようにします。 「.」や「..」はディレクトリなので、この判定がなければ、次の「………」に 処理が移ります。このとき、ディレクトリの場合は SearchDirFile()を再帰的に 呼び出しますので、「.」や「..」がこの処理にかかると無限ループに入って しまい致命的な問題となります。どんなことがあっても「.」や「..」の場合は 「………」の処理に入ってはいけないのです。 プログラミングにおいては、起こりうる可能性がある全ての場合に対して 安全に動作するように考慮すべきです。安易に「こうなるはずだ」と思って 特定の条件を省略するとバグの元になりますので注意した方がいいと思います。
その他の回答 (1)
- MovingWalk
- ベストアンサー率43% (2233/5098)
この処理は、指定のディレクトリで最初に見つかったファイル(orディレクトリ)の 判定部分ですよね。(2番目以降は、下の「次のファイルの検索」です) 通常サブディレクトリには、カレントディレクトリを現す「.]という ディレクトリが最初にありますのでそういう結果になっているんですね。 唯一違うのは、ルートディレクトリ(C:\など)の場合です。 MS-DOS(コマンド)プロンプトで、 DIR C:\WINDOWS|MORE と DIR C:\|MORE の両方をやってみると雰囲気がわかるかもしれません。
補足
ルートを指定したら、……… の部分の処理がされました。 詳しく調べてみると、それは finddata.cFileName が ルートに有るファイル名だった場合でした。 コメントの行位置で、finddata.cFileName が ファイル名になる場合と "." になる場合を確認できました。 ifのもう1つの条件の strcmp( finddata.cFileName, ".." ) が偽になるのはどういう場合ですか? 他のURLで、このように while( FindNextFile の手前で strcmp( finddata.cFileName, ".." ) と strcmp( finddata.cFileName, "." ) の2つの条件を調べているソースが有ればURLを教えてください。
お礼
安全を考慮するとそうですね。 でもやっぱりそれは通常は起こらず、どのように試しても それになるのを確認することはできませんでした。 ありがとうございました。