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