Delphi小ネタ

日記書くネタが無いので。ロングファイルネームをショートファイルネームにするのは、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書きすぎ」だそうだ。なんとなく、挟んでないと落ち着かないんだよ。