ConvertPath

Функция FSF.ConvertPath преобразует относительное имя файлового объекта в полное (относительно FSF.GetCurrentDirectory() - в большинстве случаев это соответствует текущему каталогу активной панели).

Замечание для ConvertPath Внимание!

size_t WINAPI ConvertPath(
  enum CONVERTPATHMODES Mode,
  const wchar_t *Src,
  wchar_t *Dest,
  size_t DestSize
);

Параметры

Mode
Указывает на необходимое действие. Может быть следующим (перечисление CONVERTPATHMODES):
ДействиеОписание
CPM_FULL преобразует относительное имя файлового объекта в полное
CPM_REAL преобразует относительное имя файлового объекта в полное, с учётом символических ссылок.
CPM_NATIVE преобразует относительное имя файлового объекта в полное, предваряя путь префиксами "\\?\" (для локальных объектов) или "\\?\UNC\" (для сетевых объектов);
это преобразование имеет смысл применять для избежания проблем с длинными и нестандартными именами файлов (см. Naming Files, Paths, and Namespaces)
Src
Указатель на источник данных - полное или относительное имя файла/каталога.
Dest
Укзатель на строку назначения, сюда будет помещён полный путь. Установите Dest = NULL для того, чтобы узнать необходимый размер буфера в символах.
DestSize
Максимальное количество символов, которое можно поместить в Dest, с заключительным нулём.

Возвращаемое значение

Необходимый размер буфера Dest в символах.

Особенности Mode = CPM_REAL:

Замечания

  1. Параметры Src и Dest могут ссылаться на одну и ту же строку.

Пример

Неправильно:

   GetFileAttributes(L"..\\some_file");

Правильно:

   std::vector<wchar_t> Buffer(MAX_PATH);

   for (;;)
   {
     const auto ActualSize = FSF.ConvertPath(CPM_FULL, L"..\\some_file", Buffer.data(), Buffer.size());

     if (ActualSize <= Buffer.size())
        break;

     Buffer.resize(ActualSize);
   }

   GetFileAttributes(Buffer.data());
Смотрите также: