お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」

[Q]
ファイルの短い名前:エイリアス(標準8.3形式)のフルパス名を、長い名前 のフルパス名にするにはどうすればいいですか?

[A]
 この必要に遭遇するのは、ファイルをエクスプローラなどからDrag&Dropし
て、ParamStr(i)に収めたときでしょう。例えば次のようになっています:

    ParamStr(1)=
      'E:\PROGRA~1\BORLAND\DELPHI~1.0\BIN\BORLAN~1.0\DELPHI~1.LNK'

 このとき、

    FindFirst(ParamStr(1),faAnyFile,SearchRec)

で、SearchRec にファイルあるいはディレクトリー(ここではファイル)が
捕捉され、SearchRec.Name には、ロング名が入ります(TJIN さんより:
SBORLAND MES 16 '' )。ただし、パスは含みません:

    SearchRec.Name='Delphi 2.0.lnk';

 この原理を使い、ディレクトリー名は再帰で求めたのが、以下の例です。
[例]
{=======================================================}
function TailLongName(FullPathName: String; Attr: integer): String;
var
  SearchRec: TSearchRec;
begin
  if FindFirst(FullPathName,Attr,SearchRec)=0 then
    Result:=SearchRec.Name
  else
    Result:='';
  FindClose(SearchRec);
end; {TailLongName}

{=======================================================}
function GetLongDirName(DirName:String): String;
var
  LongDirName: String;
begin
  if Length(Dirname)=3 then
    Result:=Dirname
  else begin
    LongDirName:=
      TailLongName(DirName,faDirectory+faHidden+faSysFile);
    DirName:=ExtractFileDir(DirName);
    Result:=PutYenMark(GetLongDirName(Dirname))+LongDirName;
  end;
end; {GetLongDirName}

{=======================================================}
function GetLongFullPathName(ShortFullPath:String): String;
{ShortFullPathはディレクトリー名でもよい}
Var
  aDir: String;
begin
  aDir:=GetLongDirName(ExtractFileDir(ShortFullPath));
  if ExtractFilename(ShortFullPath)='' then
    Result:=aDir
  else
    Result:=PutYenMark(aDir)+
      TailLongName(ShortFullPath,faAnyfile);
end; {GetLongFullPathName}

{=======================================================}
function PutYenMark(vDir: String): String;
{末端に'\'がないとき、付加した文字列を返す。ある時はそのまま返す。
 >#73 [FAQ]ディレクトリ名をリネームする、など参照}

【注意】
●FileNameが、ディレクトリーでもファイル名でもないとき
GetLongFullPathName(FileName)を呼ぶと、破綻します。従って、
DirectoryExists や、FileExists で確かめてから使うと安全です(短い名前
でも使えるんですね!)。

●上の例を使うと、

  GetLongFullPathName(ParamStr(1))=
    'E:\Program Files\Borland\Delphi 2.0\BIN\Borland Delphi 2.0    Delphi 2.0.lnk';

となります。


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。

Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会