ExtractFileDriveとGetDriveType関数

解決


deldel3号  2009-05-06 08:38:00  No: 34280

ExtractFileDriveとGetDriveType関数についての質問です。
自作関数aに引数(p:=edit1.text)を渡してその中で使用しているのですが
2回目に使用すると結果が変わります。
使い方としてはこういう感じです。自作関数をa、引数をpとしてます。
p:=edit1.Text;
//aはboolean型でフロッピーならtrueを違えばfalseを返します
a(p);
//ここだとtrueになる・・・(1)
a(p);
//ここだとfalseになる・・・(2)

a()
s := ExtractFileDrive(p);
i :=GetDriveType(s);
if(フロッピーなら)
a:=true;
else
a:false;

省略してますがこういった感じです。
なぜ(1)はtrueを返すのに(2)ではfalseを返すのでしょうか?
ステップ実行したところpの値はずっと同じでsの値が(1)と(2)の
関数aを呼んで代入する前は違いました。
ただ
s := ExtractFileDrive(p);で代入すると同じ'A:'になります。
しかしi :=GetDriveType(s);の箇所では(1)ではi=2、(2)ではi=1を
返すので(1)ではフロッピーとなりtrue、(2)では存在しないとなり
falseを返します。

相違点はこのくらいしかないのですが、なぜこのようなことになるのでしょうか?そして回避方法はあるのでしょうか?

よろしくお願いします。


KHE00221  2009-05-06 16:25:54  No: 34281

function CheckFD(S: String): Boolean;
var
    P: String;
begin
    P := ExtractFileDrive(S);
    if GetDriveType(PChar(P)) = 2 then Result := True else Result := False;
end;

procedure TForm4.Button1Click(Sender: TObject);
begin
    if CheckFD('A:\TEST\TEXT.TXT') = True then Memo1.Lines.Add ('FD1');
    if CheckFD('A:\ABC\')  = True then Memo1.Lines.Add ('FD2');
end;

これで FD1 FD2 と表示されるけど・・・・・
再現不可


deldel3号  2009-05-12 21:13:24  No: 34282

解決になるのかわかりませんが、どちらの関数を呼び出すときもp:=edit1.Text;
を挿入して解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加