2008年7月29日

ファイル名を短い形式に変換

長いファイル名(Long File Name)の混じったフルパス名を全て8.3形式の短いファイル名(Short File Name)に変換する(あまりあり得ない状況だとは思いますけど)にはGetShortPathNameを使用します。
uses
  Windows;

function ToShortFilename(const Filename: String): String;
var
  Size: Integer;
begin

  { Calculate buffer size }
  Size := GetShortPathName(PChar(Filename),nil,0);
  if Size = 0 then
  begin
    Result := Filename;
    Exit;
  end;

  { Convert to short name }
  SetLength(Result,Size);
  Size := GetShortPathName(PChar(Filename),PChar(Result),Size);
  SetLength(Result,Size);

end;

ただし対象となるファイルが存在しないと最初のGetShortPathName呼び出しで0が返ってきて変換不能になってしまうため、注意が必要です(この例では渡されたパス名をそのまま返すようにしています)。

0 件のコメント: