Сокращенное имя каталога
Есть имя каталога:
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;
|
|