Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Автоматическое определения кодировки текста
   Категория: Текст и строки
  Объект экрана — Screen
   Категория: Компоненты
  Замена подстроки в строке
   Категория: Текст и строки
  BDE. Динамическое создание псевдонима
   Категория: Базы данных
  Число строкой с предстоящими нулями
   Категория: Текст и строки
  Перегенерировать все индексы Dbase
   Категория: Базы данных
  Форма всегда наверху
   Категория: Компоненты

Delphi - База Знаний: Получить короткий путь файла (изменив русские буквы) если есть длинный и на оборот

  << Вернуться к Содержанию  

function sfn(const LongName: String): String; 
// Возвращает LongFileName преобразованное в соответствующее короткое имя
var i :Integer;
begin
В В SetLength(Result,Length(LongName));
В В i := GetShortPathName(pChar(LongName),pChar(Result),Length(Result));
В В ifВ В i > Length(Result)В В then begin
В В В В SetLength(Result,i);
В В В В i := GetShortPathName(pChar(LongName),pChar(Result),Length(Result));
В В end;
В В SetLength(Result,i);
end;
function ShortToLongFileName(FileName: string): string;
// Возвращает FileName преобразованное в соответствующее длинное имя
var
В В KernelHandle: THandle;
В В FindData: TWin32FindData;
В В Search: THandle;
В В GetLongPathName: function(lpszShortPath: PChar; lpszLongPath: PChar;
В В В В В В В В В В В В В В В В В В В В В В В В В В В В cchBuffer: DWORD): DWORD; stdcall;
begin
В В KernelHandle := GetModuleHandle('KERNEL32');
В В if KernelHandle <> 0 then
В В В В @GetLongPathName := GetProcAddress(KernelHandle, 'GetLongPathNameA');
В В // Использю GetLongPathName доступную в windows 98 и выше чтобы
В В // избежать проблем доступа к путям UNC в системах NT/2K/XP
В В if Assigned(GetLongPathName) then begin
В В В В SetLength(Result, MAX_PATH + 1);
В В В В SetLength(Result, GetLongPathName(PChar(FileName), @Result[1], MAX_PATH));
В В end
В В else begin
В В В В Result := '';
В В В В // Поднимаюсь на одну дирректорию выше от пути к файлу и запоминаю
В В В В // в result.В В FindFirstFile возвратит длинное имя файла полученное
В В В В // из короткого.
В В В В while (True) do begin
В В В В В В Search := Windows.FindFirstFile(PChar(FileName), FindData);
В В В В В В if Search = INVALID_HANDLE_VALUE then Break;
В В В В В В Result := String('') + FindData.cFileName + Result;
В В В В В В FileName := ExtractFileDir(FileName);
В В В В В В Windows.FindClose(Search);
В В В В В В // Нахожу имя диска с двоеточием.
В В В В В В if Length(FileName) <= 2 then Break;
В В В В end;
В В В В Result := ExtractFileDrive(FileName) + Result;
В В end;
end;
  << Вернуться к Содержанию