お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



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

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

[A]
 前のと逆ですね。そんな必要あるんですか?
 「フルパスの長い名前を求める」ルーチン作成に必要でした(笑)。
以下の例をご覧下さい。長い名前を求めるのとほぼ同等なやり方でやってい
ます。これも、安全のため、GetShortFullPathNameに渡す前に、存在チェッ
クすべきでしょう。

 こちらは、瑠瓏 さんが、#27 [FAQ] LongFileName を求める、で使われた、
TSearchRec レコード、TWin32FindData 構造体に、cAlternateFileName とい
う、短い名前を格納するフィールドがあるのを利用しました。
[例]
{=======================================================}
function TailShortName(FullPathName: String; Attr: integer): String;
var
  SearchRec: TSearchRec;
  aPath: string;
begin
  Result:=ExtractFilename(FullPathName);
  if FindFirst(FullPathName,Attr,SearchRec)=0 then begin
    aPath:=SearchRec.FindData.cAlternateFileName;
    if AnsiCompareText(aPath,Result)<>0 then
      if Pos('~',aPath)=0 then aPath:=Result;
                  {ゴミデータの時は使わない}
    Result:=aPath;
  end else
    Result:='';
  FindClose(SearchRec);
end; {TailShortName}

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

{=======================================================}
function GetShortFullPathName(LongFullPath:String): String;
{LongFullPathはディレクトリー名でもよい}
var
  aDir: String;
begin
  aDir:=GetShortDirName(ExtractFileDir(LongFullPath));
  if ExtractFilename(LongFullPath)='' then
    Result:=aDir
  else
    Result:=PutYenMark(aDir)+
      TailShortName(LongFullPath,faAnyfile);
end; {GetShortFullPathName}


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

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