GetOpenFileName
是 Windows API 中的一个函数,用于弹出一个文件选择对话框,让用户选择一个或多个文件。这个函数可以获取到文件的完整路径,如果你只想从这个路径中提取文件名,可以通过编程方式来实现。
GetOpenFileName
函数允许用户从文件系统中选择一个或多个文件。函数原型如下:
BOOL GetOpenFileName(
LPOPENFILENAME lpofn
);
其中 lpofn
是一个指向 OPENFILENAME
结构体的指针,该结构体包含了文件选择对话框的各种属性和回调函数。
GetOpenFileName
是一个 Win32 API 函数,属于系统级的文件选择机制。
适用于桌面应用程序,尤其是需要让用户选择文件进行读取或处理的场景。
要从 GetOpenFileName
获取的完整路径中提取文件名,可以使用 C++ 标准库中的 <filesystem>
头文件(C++17 及以上版本)或者使用 Windows API 函数 PathFindFileName
。
<filesystem>
示例代码:#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;
}
PathFindFileName
示例代码:#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
获取的完整路径中提取出文件名。
领取专属 10元无门槛券
手把手带您无忧上云