Delphi World - Сокращенное имя каталога
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Сокращенное имя каталога

Есть имя каталога:

c:\windows\media\temp\abc\sound\chime.wav

Мне необходима сокращенная запись, такая как

c:\windows\..\sound\chime.wav

а не полный путь к файлу.

Есть ли простой способ для этого?

Я разработал процедуру, которая делает нечто похожее. Она сокращает имя каталога, когда он и текущий путь имеют в корне тот же диск и/или часть пути, совпадающие вначале. Полученный результат (сокращенная запись) действительно легче для восприятия. Я производил кодирование в шестнадцатиричном редакторе в Borland Pascal и некоторое время не использовал. Я не думаю, что данный код может быть несовместим с последними версиями Delphi.


function shortenfilename(s: string): string;
var
  drive, curdrive: string[2];
  dir, curdir: string[80];
  name: string[20];
  ext: string[5];
  i: byte;
begin
  for i := 1 to length(s) do
    s[i] := upcase(s[i]);
  s := fexpand(s);
  fsplit(s, dir, name, ext);
  drive := copy(dir, 1, 2);
  dir := copy(dir, 4, length(dir) - 3);
  getdir(0, curdir);
  curdrive := copy(curdir, 1, 2);
  curdir := copy(curdir, 4, length(curdir) - 3) + '\';
  if drive = curdrive then
  begin
    if copy(dir, 1, length(curdir)) = curdir then
    begin
      i := length(curdir);
      if length(dir) <> i then
        dir := dir + '\';
      shortenfilename := copy(dir, i + 1, length(dir) - i - 1) + name + ext;
    end
    else
      shortenfilename := copy(s, 3, length(s) - 2);
  end
  else
    shortenfilename := s;
end;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования