首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用GetOpenFileName仅获取路径中的文件名

GetOpenFileName 是 Windows API 中的一个函数,用于弹出一个文件选择对话框,让用户选择一个或多个文件。这个函数可以获取到文件的完整路径,如果你只想从这个路径中提取文件名,可以通过编程方式来实现。

基础概念

GetOpenFileName 函数允许用户从文件系统中选择一个或多个文件。函数原型如下:

代码语言:txt
复制
BOOL GetOpenFileName(
  LPOPENFILENAME lpofn
);

其中 lpofn 是一个指向 OPENFILENAME 结构体的指针,该结构体包含了文件选择对话框的各种属性和回调函数。

相关优势

  • 用户友好:提供了一个图形界面,让用户可以直观地选择文件。
  • 灵活性:可以配置对话框的各种选项,如文件类型过滤器、初始目录等。
  • 多选支持:可以设置对话框以支持多文件选择。

类型

GetOpenFileName 是一个 Win32 API 函数,属于系统级的文件选择机制。

应用场景

适用于桌面应用程序,尤其是需要让用户选择文件进行读取或处理的场景。

获取路径中的文件名

要从 GetOpenFileName 获取的完整路径中提取文件名,可以使用 C++ 标准库中的 <filesystem> 头文件(C++17 及以上版本)或者使用 Windows API 函数 PathFindFileName

使用 C++ <filesystem> 示例代码:

代码语言:txt
复制
#include <iostream>
#include <filesystem>
#include <windows.h>

int main() {
    OPENFILENAME ofn;
    char fileName[MAX_PATH] = "";

    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFilter = "All Files (*.*)\0*.*\0";
    ofn.lpstrFile = fileName;
    ofn.nMaxFile = MAX_PATH;
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    ofn.lpstrTitle = "Select a File";

    if (GetOpenFileName(&ofn)) {
        std::filesystem::path filePath(fileName);
        std::string fileNameOnly = filePath.filename().string();
        std::cout << "Selected file name: " << fileNameOnly << std::endl;
    }

    return 0;
}

使用 Windows API PathFindFileName 示例代码:

代码语言:txt
复制
#include <windows.h>
#include <iostream>

int main() {
    OPENFILENAME ofn;
    char fileName[MAX_PATH] = "";

    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFilter = "All Files (*.*)\0*.*\0";
    ofn.lpstrFile = fileName;
    ofn.nMaxFile = MAX_PATH;
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    ofn.lpstrTitle = "Select a File";

    if (GetOpenFileName(&ofn)) {
        char* fileNameOnly = PathFindFileName(fileName);
        std::cout << "Selected file name: " << fileNameOnly << std::endl;
    }

    return 0;
}

参考链接

通过上述方法,你可以从 GetOpenFileName 获取的完整路径中提取出文件名。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券