Преобразование путей к файлам

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Преобразование путей к файлам

Сообщение Sharfik » 23.02.2014 04:23:44

Допустим есть путь в памяти программы вида
F:\Dropbox\MyProgram\src\build\..\..\ДистрТест\temp\manifest.xml

Существует функция в модулях где то, чтобы преобразовать путь к укороченному виду без относительности?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Преобразование путей к файлам

Сообщение Максим » 23.02.2014 04:55:39

Что такое "укороченный вид без относительности"? Копайте в сторону ExpandFileNameUTF8.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Преобразование путей к файлам

Сообщение Sharfik » 23.02.2014 05:32:04

Максим писал(а):Что такое "укороченный вид без относительности"? Копайте в сторону 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; 
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Преобразование путей к файлам

Сообщение Максим » 23.02.2014 16:06:00

Используйте функции из LazFileUtils. Функции из FileUtil ссылаются на LazFileUtils. SysUtils - это модуль RTL FPC, для версии 2.6.2 функции из него работают в кодировке ANSI.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 598
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru