Максим писал(а):Что такое "укороченный вид без относительности"? Копайте в сторону ExpandFileNameUTF8.
Это значит, что сделать из большого кол-ва символов меленькое, что по смыслу является тем же самым, но так же отсутствуют указатель перехода директорий.
Кажется нашел ее, но только вопрос на миллион.. чем отличаются эти три модуля LazFileUtils, FileUtil, SysUtils. Кто новее, на кого опираться и кому верить из них. Модули имеют одни и те же функции, порой с одинаковыми именами.
В LazFileUtils есть функция, которая вроде делает работу нужную, но алгоритм немного иной чем я себе накидывал.
- Код: Выделить всё
На входе F:\Dropbox\MyProgram\src\build\..\..\ДистрТест\temp\manifest.xml
Path:=MinimizeSearchPath(Path);
На выходе SelectedPath F:\Dropbox\MyProgram\ДистрТест\temp\manifest.xml
Не хочу нагромождений, хоть и сделал небольшую свою функцию для того же.
- Код: Выделить всё
function ConvertPathToShortPath(APath:String):String;
var
iLen,iPos,i,b:Integer;
DChar,XDir:String;
begin
// in: somebody\test\..\lala
// out: somebody\lala
DChar:=DirectorySeparator; //see Unit System
XDir:=DChar+'..'+DChar;
b:=0;
iPos:=pos(XDir,APath);
while iPos>0 do
begin
for i:=iPos-1 downto 1 do
begin
if APath[i]=DChar then
begin
break;
end
else begin
inc(b);
end;
end;
iPos:=0;
if i>1 then
begin
b:=b+length(XDir);
Delete(APath,i+1,b);
iPos:=pos(XDir,APath);
end;
b:=0;
end;
Result:=APath;
end;