ユニークなファイル名を作成する関数

テンポラリファイルの作成と同じような関数ですが、自由に拡張子を設定でき、オリジナルのファイル名を損なわない関数です。この関数も0バイトのファイルを作成しますので、必要なくなったら削除するようにしましょう。

function GetUniqueFileName(const FileName: String): String;
var
  Path, Name, Ext: String;
  I: Integer;
  F: File;
begin
  { ファイル名をパス、名前、拡張子に分解する。     }
  { パス情報がない場合はカレントディレクトリを使う }
  Path := ExtractFilePath(FileName);
  if Path = '' then Path := GetCurrentDir;
  Ext  := ExtractFileExt(FileName);
  Name := ExtractFileName(FileName);
  
  if Name = '' then 
    Name := 'untitled'//ファイル名がない場合は適当に補完する
  else
    Delete(Name, Length(Name) - Length(Ext) +1, Length(Ext));
  I := 0;
  Result := Path + Name + Ext;
  { 新しく作ったファイルが存在するか調べる }
  while FileExists(Result) do
  begin
    Result := Path + Name +'['+ IntToStr(I) +']' + Ext;
    Inc(I);
  end;
  { ファイルを作成する }
  AssignFile(F, Result);
  Rewrite(F);
  CloseFile(F);
end;

Copyright 2001 Rinka Kouzuki All Rights Reserved.