Хммм, согласно моей практике
Предполагая, что файл находится в текущем рабочем каталоге, GetFullPathName звучит как хорошая идея.Он принимает имя файла и преобразует его в полный путь, предварительно установив текущий рабочий каталог.
Примечание. API возвращает путь независимо от того, существует файл в рабочем каталоге или нет;он использует только предоставленное вами имя файла и заранее подготавливает текущий рабочий каталог.
DEMO1:
#include <windows.h>
int main()
{
char filename[] = "test.txt";
char fullFilename[MAX_PATH];
GetFullPathName(filename, MAX_PATH, fullFilename, nullptr);
MessageBox(NULL, fullFilename, "DEBUG", MB_OK);
}
Результат отладки:

На самом деле тестов нет.Текстовый документ вообще.
Таким образом, вы можете сделать это следующим образом
DEMO2:
#include <windows.h>
int main()
{
char lpszPath[] = "..\\Project20";
long length = 0;
TCHAR* buffer = NULL;
buffer = new TCHAR[length];
length = GetShortPathName(lpszPath, buffer, length);
if (length == 0)
{
MessageBox(NULL, "ERROR", "DEBUG", MB_OK);
}
else
{
MessageBox(NULL, "SUCCESS", "DEBUG", MB_OK);
}
delete[] buffer;
return 0;
}
Суждение оналичие документов через ОШИБКУ и УСПЕХ 
