首页
学习
活动
专区
工具
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 获取的完整路径中提取出文件名。

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

相关·内容

  • Excel: 提取路径文件名

    文章背景:在日常工作,有时需要从绝对路径中提取文件名。比如,已知某个文件存储路径,想要获取最后文件名称。下面介绍两种方法。...A2公式,REPT函数将空格复制99次。...A2公式,SUBSTITUTE函数将字符串斜杆\替换成99个空格。...思路分析:针对文件路径,先用99个空格替换掉路径斜杆\;再从字符串右侧起,获取99个字符(新字符串),此时,新字符串内既有文件名,也有空格;最后,通过trim函数,移除首尾空格,从而得到所需要文件名...思路分析:针对文件路径使用Split函数,基于斜杆/,将路径分割成各个小块,保存在一个数组内;然后通过Ubound函数,获取数组最后一个索引号,从而将文件名提取出来。

    2.6K20

    Java 几种获取文件路径方式

    前言 Java 开发我们经常要获取文件路径,比如读取配置文件等等。今天我们就关于文件路径和如何读取文件简单地探讨一下。 2. 文件路径 文件路径通常有 相对路径 与 绝对路径。...2.2 绝对路径 文件在文件系统真正存在路径,是指从硬盘根目录(Windows为盘符)开始,进行一级级目录指向文件(从根目录一层层读写)。...Java 通过java.io.File 来进行文件操作。并且提供了以下三个方法来获取文件路径。 3.1 getPath 该方法返回文件抽象路径字符串形式。...实际上就是传递给 File 构造函数路径名。 因此,如果 File 对象是使用相对路径创建,则返回值也将是相对路径。如果是绝对路径就返回绝对路径。...如果我们确定没有使用速记符,并且驱动器号大小写已标准化(如果使用Windows OS),我们应该首选使用getAbsoultePath(),除非你项目中必须使用 getCanonicalPath()。

    11.3K20

    IOS获取各种文件目录路径方法

    您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序偏好. Caches 目录:用于存放应用程序专用支持文件,保存应用程序再次启动过程需要信息。...4、tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程不需要信息。...获取这些目录路径方法: 1,获取家目录路径函数: NSString *homeDir = NSHomeDirectory(); 2,获取Documents目录路径方法: NSArray *paths...(); 5,获取应用程序程序包中资源文件路径方法: 例如获取程序包中一个图片资源(apple.png)路径方法: NSString *imagePath = [[NSBundle mainBundle...iphone沙盒(sandbox)几个目录获取方式: [cpp] view plain copy // 获取沙盒主目录路径   NSString *homeDir =

    5.7K20

    ExcelVBA打开文件对话框之.GetOpenFilename 方法

    ExcelVBA打开文件对话框之Application.GetOpenFilename 方法 Application.GetOpenFilename 方法 显示标准“打开”对话框,并获取用户文件名,而不必真正打开任何文件...参数 返回值 Variant 【说明】 在 FileFilter 参数传递该字符串由文件筛选字符串对以及后跟 MS-DOS 通配符文件筛选规范组成,中间以逗号分隔。...要为单个文件筛选类型使用多个 MS-DOS 通配符表达式,需用分号将通配符表达式分开。例如:“Visual Basic 文件 (*.bas; *.txt)、*.bas; *.txt”。...本方法返回选定文件名或用户输入名称。返回名称可能包含路径说明。如果 MultiSelect 为 True,则返回值将是一个包含所有选定文件名数组(即使选定了一个文件名)。...如果用户选择了文件名,则此代码在消息框显示该文件名

    2.9K20

    Application主程序对象方法(三)

    基 础 知 识 Application对象GetOpenFilename方法,可以打开一个标准“打开”对话框,当用户在对话框单击”打开“按钮时,将返回选择路径文件名(实际不会真正打开文件)。...2、参数FilterIndex,指定默认文件筛选条件索引值,即在“文件类型”框显示文件类型,索引值从1至在参数FileFilter中指定筛选条件数。默认情况下,使用第一个文件筛选条件。...设置为True允许选择多个文件名称,返回值是一个包含所有选定文件名数组(即使选定一个文件名。) 示 例 一 下面以筛选文本文件为例,选择单个文件,返回文件地址,在立即窗口中显示。...按条件筛选出txt类型文件,但选中”文本文件“打开时,可以返回结果为文件路径和名称。如果选择取消,则返回false。 (也可以将GetOpenFilename参数,用变量分离出来,方便修改。)...---- 本节主要介绍了application主程序对象GetOpenFilename方法,注意几个参数使用。接受GetOpenFilename方法返回值变量需要定义为variant变体型变量。

    1.6K20

    获取路径某个json文件内容字符串

    前言 实际项目中可能会有需要读取类路径下面的配置文件内容需求,由于springboot项目打包是jar包,通过文件读取获取方式开发时候没有问题,但是上到linux服务器上就有问题了,对于这个问题记录一下处理方式...类加载器方式 通过类加载器读取文件流,类加载器可以读取jar包编译后class文件,当然也是可以读取jar包文件流了 比如要读取resources目录下common/tianyanchasearch.json...FileUtil.getStringFromInputStream(resourcePath); return GlobalResult.succeed(JSON.parseObject(content)); /** * 从输入流获取文件内容字符串...; } catch (IOException ex) { System.out.println("=======获取数据时...推测主要原因是springboot内置tomcat,打包后是一个jar包,因此通过文件读取获取方式行不通,因为无法直接读取压缩包文件,读取只能通过流方式读取

    2.6K30

    如何在 Go 函数获取调用者函数名、文件名、行号...

    //获取是 CallerA函数调用者调用栈 pc1, file1, lineNo1, ok1 := runtime.Caller(1) } 函数返回值为调用栈标识符、带路径完整文件名...、该调用在文件行号。...获取调用者函数名 runtime.Caller 返回值第一个返回值是一个调用栈标识,通过它我们能拿到调用栈函数信息 *runtime.Func,再进一步获取到调用者函数名字,这里面会用到函数和方法如下...下面看一个使用 runtime.Caller 和 runtime.FuncForPC 一起配合获取调用者信息简单例子 package main import ( "fmt" "path" "...总结 今天介绍了通过 runtime.Caller 回溯调用栈获取调用者信息方法,虽然强大,不过频繁获取这个信息也是会对程序性能有影响。

    6.5K20
    领券