FSF.ConvertPath преобразует относительное имя файлового объекта в полное.
Внимание!
GetFullPathName из Windows API.size_t WINAPI ConvertPath( enum CONVERTPATHMODES Mode, const wchar_t *Src, wchar_t *Dest, size_t DestSize );
| Действие | Описание |
|---|---|
| CPM_FULL | преобразует относительное имя файлового объекта в полное |
| CPM_REAL | преобразует относительное имя файлового объекта в полное, с учётом символических ссылок. |
| CPM_NATIVE | преобразует относительное имя файлового объекта в полное, предваряя путь префиксами "\\?\" (для локальных объектов) или "\\?\UNC\" (для сетевых объектов);это преобразование имеет смысл применять для избежания проблем с длинными и нестандартными именами файлов (подробности) |
Dest = NULL для того, чтобы узнать необходимый размер буфера в символах.Dest, с заключительным нулём.Dest в символах.
Особенности Mode = CPM_REAL:
Dest строку, подобную этой: "\\?\Volume{273872e0-5e49-11d5-b614-0080ad70bb9b}\Foo.bar"
"D:\Foo\Bar" является симлинком для реально существующего "C:\work\Doc", то функция для файла "D:\Foo\Bar\1092\readme.txt" вернёт "C:\work\Doc\1092\readme.txt"
Src и Dest могут ссылаться на одну и ту же строку.
Неправильно:
GetFileAttributes(L"..\\some_file");
Правильно:
wchar_t *FullName = new wchar_t[MAX_PATH];
size_t Size = FSF.ConvertPath(CPM_FULL, L"..\\some_file", FullName, Size);
if (Size > MAX_PATH)
{
delete[] FullName;
FullName = new wchar_t[Size];
FSF.ConvertPath(CPM_FULL, L"..\\some_file", FullName, Size);
}
GetFileAttributes(FullName);
delete[] FullName;