Получение только имени файла из пути с GetOpenFileName - PullRequest
2 голосов
/ 03 мая 2020

Итак, у меня есть этот код:

        OPENFILENAME ofn;

        char file_name[100];

        ZeroMemory(&ofn, sizeof(OPENFILENAME));

        ofn.lStructSize = sizeof(OPENFILENAME);
        ofn.hwndOwner = NULL;
        ofn.lpstrFile = file_name;
        ofn.lpstrFile[0] = '\0';
        ofn.nMaxFile = 100;
        ofn.lpstrFilter = "Dynamic Link Libraries (.dll)\0*.dll";
        ofn.nFilterIndex = 1;

        GetOpenFileName(&ofn);
        cout << (const char*)ofn.lpstrFile << endl;

, который просто определяет свойства для windows, чтобы затем открыть файл с GetOpenFileName(&ofn), но когда я печатаю lpstrFile, я получаю полный путь файл, который я выбрал.

Теперь мой вопрос: как на c ++ я могу получить только имя файла ex file.dll, а не C:/hello/file.dll из ofn.lpstrFile, используя либо функции замены текста, либо встроенные windows функций.

Заранее спасибо.

1 Ответ

3 голосов
/ 03 мая 2020

Получил с помощью класса std::filesystem::path:

std::filesystem::path myFile = ofn.lpstrFile;
std::filesystem::path fullname = myFile.filename();

cout << fullname.c_str() << endl;

И он также работает с методом, указанным @WhozCraig:

#pragma comment(lib, "shlwapi.lib")
#include <Shlwapi.h>

PathStripPath(ofn.lpstrFile);
...