15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
ExtractFilePath のヘルプに次の例があり、やってみたらエラーになります。
どこが間違ってるのですか?
ChDir(ExtractFilePath(FileName));
[A]
ExtractFilePath は、ファイル名の直前まで、つまり、
FileName:='c:\delphi_d\test\chdirp.exe';
に対して、
ExtractFilePath(FileName)='c:\delphi_d\test\'
としますので、末端に'\'がつきます。ルートの場合は ChDir('c:\'); で問題
ないのですが、ディレクトリーはダメです。末端'\'を取りましょう。
文字列末端の'\'を取るだけなんですが、プログラム中に1ヶ所位で、ルート
でないなら
if FileName[Length(FileName)]='\' then
FileName:=Copy(FileName,1,Length(FileName)-1);
で事足りますが...
function GetDirectory(const Dir: string): string;
{ルート以外は末端'\'を取る}
function PutYenMark(const Dir: string): string;
{末端に'\'がなければ付ける}
を以下の[例]に挙げます(挙げるまでもないけど、一応、説明の一部として
)。それで質問の例は
ChDir(GetDirectory(ExtractFilePath(FileName)));
これで文句ないはず。
[例]
{=========================================================}
function GetDirectory(const Dir: string): string;
var
Len: integer;
function DriveAndColon: boolean;
begin
Result:=false;
if (UpCase(Dir[1]) in ['A'..'Z']) and (Dir[2]=':')
then Result:=true;
end;
begin
Result:=Dir;
Len:=Length(Dir);
if Dir[Len]='\' then begin
if (Len=3) and DriveAndColon then
else Result:=Copy(Dir,1,Len-1);
end else begin
if (Len=2) and DriveAndColon then
Result:=Dir+'\'
end;
end; {GetDirectory}
{=========================================================}
function PutYenMark(const Dir: string): string;
begin
if Dir[Length(Dir)]<>'\' then Result:=Dir+'\'
else Result:=Dir;
end; {PutYenMark}
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|