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を返します。
相違点はこのくらいしかないのですが、なぜこのようなことになるのでしょうか?そして回避方法はあるのでしょうか?
よろしくお願いします。
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 と表示されるけど・・・・・
再現不可
解決になるのかわかりませんが、どちらの関数を呼び出すときもp:=edit1.Text;
を挿入して解決しました。
ツイート | ![]() |