16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE^7:長いファイル名(フルパス)を取得"
この発言は #00584 Fermion さんのRE^6:長いファイル名(フルパス)を取得 に対するコメントです
Fermion さん、こんにちは。Satobe です。
> お気を悪くされたのでしたら謝ります。m(_"_)m
や、私はぜんぜん気にしてませんが...
逆に私の発言が Fermion さんに不快な印象を与えてしまったよう
ですね。
テクニカルハンドブックのあのコードを、そっくりそのまま使う
のでしたら問題ないと思います。m(_`_)m
ドラッグ&ドロップされたファイル名を、長いファイル名に変換
しているわけですので、普通に考えれば FindFirst関数が失敗す
るわけないですもんね。(^^;
ただ、VCLソースを見る限り、FindFirstが失敗(非ゼロを返す)
した場合に、FindCloseを呼び出すのは、明らかに VCLの使い方の
間違いであり、実際に「WinNTでハングアップした」なんて事例も
報告されていたはずです。
#え〜と、nifty:FDELPHI/MES/11/3839 にありますね。
> ヘルプを見てみますと FindFirst と FindClose はセットで使うかの
>表現も見られますので、本来、 FindClose は FindFirst に失敗しても
>必ずセットで呼び出すことを前提としているのだとしたらコーディング
>上の間違いはないし。。。(^^;)
そう、ヘルプの説明もハッキリしてないですよね。
FindFirstが失敗したら FindCloseを呼び出しちゃダメなんです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#私が言いたかったのは↑まさにこの点です。
ヘルプを読み、テクニカルハンドブックの(今回話題になってい
る)コードを読んで、「FindFirstに失敗しても、必ず FindClose
を呼び出すようにコーディングしなくちゃいけないんだ」と誤解
するプログラマが増えては大変だ、と思い、あえてバグという単語
を使いました。
テクニカルハンドブックのコードが動作しない、という意味でなく、
FindFirst,FindCloseの使い方(コーディング)に誤りがある、と
多くの Delphiユーザーに警告しておきたかったのです。
こんなの周知の事実で「いまさら何言ってんの?」って感じでしたら
お許し下さい。m(_`_)m
私も nifty:FDELPHI/MES/11/3839 の発言を読んで、自分で VCLソー
スを調べてみるまで、FindFirst,FindCloseは必ずセットで呼び出す
ものだと思い込んでたんです。
#お恥ずかしい...f(^^;
98/06/21(日) 23:45 Satobe(JCG00336)
Original document by Satobe 氏 ID:(JCG00336)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|