所以我有这段代码:

        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;

它简单地定义了窗口的属性,然后使用GetOpenFileName(&ofn)打开文件,但是当我打印lpstrFile时,我得到了所选文件的完整路径。

现在我的问题是,如何在C++上使用文本替换功能或内置Windows函数只能从file.dll中获取文件名ex C:/hello/file.dll,而不能从ofn.lpstrFile中获取ojit_code。

提前致谢。

最佳答案

通过使用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);

10-02 00:58