日記書くネタが無いので。ロングファイルネームをショートファイルネームにするのは、ExtractShortPathName()で一発なんですが、逆が無かったりする。で、書くわけさ。

function ExtractLongPathName(FileName: TFileName): String;
var
  sr : TSearchRec;
begin
  Result := '';
  FileName := ExpandFileName(FileName);
  while LastDelimiter('\', FileName) >= 3 do
  begin
    if FindFirst(FileName, faAnyFile, sr) = 0 then
    begin
      try
        Result := '\' + sr.Name + Result;
      finally
        FindClose(sr);
      end;
    end
    else
    begin
      Result := '\' + ExtractFileName(FileName) + Result;
    end;
    FileName := ExtractFilePath(FileName);
    SetLength(FileName, Length(FileName) - 1);
  end;
  Result := FileName + Result;
end;

実は、あんまり使い道ないんですが、ショートファイルネームかロングファイルネームのどちらが取得されるかわからない場合、とりあえずこの関数に通せば、ロングファイルネームで考えられる・・・と。どんな場合やねん。

友人曰く、僕のDelphiのコードは、「begin~end書きすぎ」だそうだ。なんとなく、挟んでないと落ち着かないんだよ。