お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
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編纂委員会