MFC/C++学习系列之简单记录12——文件操作

embedded/2024/12/26 13:51:55/

MFC/C++学习系列之简单记录12——文件操作

  • 前言
  • 文件操作处理
  • 具体使用
    • CFileDialog类
  • CFile类和CStdioFile类
  • 错误
  • 总结


前言

学习MFC的文件处理操作!


文件操作处理

  • CFileDialog类:对话框类,获取选择的文件信息。
  • CFile类:抽象类,对文件的直接打开、关闭、读取、写入操作。
  • CStdioFile类:CFile的派生类,标准格式化文本输入输出。

具体使用

CFileDialog类

定义两个按钮,打开文件和保存文件。来使用一下CFileDialog!
在这里插入图片描述
在添加按钮后,要记得添加变量!

CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAsLPCTSTR lpszDefExt = NULL,LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter = NULL,CWnd* pParentWnd = NULL,DWORD dwSize = 0,BOOL bVistaStyle = TRUE);
  • BOOL bOpenFileDialog:
    TRUE:创建一个打开文件的对话框。
    FALSE:创建一个保存文件的对话框。
  • LPCTSTR lpszDefExt = NULL:默认文件扩展名。
  • LPCTSTR lpszFileName = NULL:初始文件名,显示在对话框中的文件名输入框的初始值。
  • DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT:对话框的行为标志。常用的标志包括:
    OFN_HIDEREADONLY:隐藏“只读”复选框。
    OFN_OVERWRITEPROMPT:如果选择的文件已存在,提示用户是否覆盖。
    OFN_PATHMUSTEXIST:确保路径存在。
    OFN_FILEMUSTEXIST:确保文件存在。
    OFN_ALLOWMULTISELECT:允许选择多个文件。
  • LPCTSTR lpszFilter = NULL:文件类型过滤器。定义用户可以选择的文件类型。格式为:“Text Files (.txt)|.txt|All Files (.)|.||”。
  • CWnd pParentWnd* = NULL:父窗口指针。对话框将作为这个窗口的子窗口显示。
  • DWORD dwSize = 0:保留参数,用于确保与16位版本的兼容性。通常设置为0。
  • BOOL bVistaStyle = TRUE:是否使用Vista风格的对话框。如果设置为TRUE,将使用Vista风格的对话框;如果设置为FALSE,将使用旧风格的对话框。
    举例:
//打开文件
CFileDialog fileDlg(TRUE, // TRUE for file open, FALSE for file save_T("txt"), // Default file extensionNULL, // No initial file nameOFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, // Options_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), // File types filterthis); // Parent window
//保存文件
CFileDialog fileDlg(FALSE, // FALSE for file save_T("txt"), // Default file extension_T("MyDocument.txt"), // Initial file nameOFN_OVERWRITEPROMPT, // Options_T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), // File types filterthis); // Parent window
//简单使用
CFileDialog fileDlg(TRUE);
CFileDialog fileDlg(FALSE);

以上是简单的打开对话框,打开对话框后,可以继续使用该类完成一些需求,在这里需要搭配DoModal 方法来显示对话框。

  • GetPathName():获取完整的文件路径。
  • GetFileName():获取文件名。
  • GetFileTitle():获取不包含路径的文件名。
  • GetFileExt():获取文件扩展名。
  • GetNextPathName():获取下一个选择的文件路径(用于多选)。
if(fileDlg.DoModal() == IDOK)
{CStringArray FilesName;fileDlg.GetFileName(FilesName);
}
else
{}

在这里插入图片描述

CFile类和CStdioFile类

  • open:打开文件
  • ReadString:读取数据
  • Close:关闭文件
  • WriteString:写入文件
  • Flush:确保内容全部写入
	CFile file;CFileException exception;file.Open(_T("xxx.txt"), CFile::modeRead | CFile::typeBinary, &exception);CStdioFile file1;CFileException exception;file1.Open(_T("xxx.txt"), CFile::modeRead, &exception);

从上述代码看,两者使用差不多。再看源码:class CStdioFile : public CFile。说明CStdioFile就是CFile的派生类。使用方式类似。

错误

0x75D70EE2 (KernelBase.dll)处(位于 MFCApplication1.exe 中)引发的异常: 0x000006BA: RPC 服务器不可用。
shell\comdlg32\fileopensave.cpp(9121)\comdlg32.dll!7687D1E0: (caller: 76856571) ReturnHr(1) tid(566c) 8007000E 内存资源不足,无法完成此操作。
在使用文件对话框时,没有对话框弹出。
这里是因为在之前项目中设置了堆栈的大小,设置过大,导致无法弹窗。修改堆栈大小,改小,文件弹窗。


总结

本文主要介绍了关于文件类的操作!


http://www.ppmy.cn/embedded/148909.html

相关文章

JavaScript基础与JQuery实践

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🐹今日诗词:花弄影,月流辉,水晶宫殿五云飞🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注…

苹果手机怎么清理空间:拯救你的拥挤手机

在数字生活的海洋中,我们的苹果手机就像一艘小船,载满了照片、应用、视频和各种下载的“宝贝”。随着时间的推移,这艘小船开始变得拥挤,航行速度放缓,甚至有时候直接卡壳。苹果手机怎么清理空间?是时候学会…

jQuery表格搜索过滤和单元格高亮插件

jQuery.FilterTable是一款表格搜索过滤和单元格高亮插件。该插件允许你对任意表格进行条件过滤&#xff0c;并且它会将搜索到的结果单元格高亮显示&#xff0c;非常实用和强大。 在线预览 下载 使用方法 在页面中引入jquery和jquery.filtertable文件。 <script src"…

【多视图学习】CONAN:用于多视图聚类的对比融合网络

CONAN&#xff1a;Contrastive Fusion Networks for Multi-view Clustering 论文链接 0.论文摘要 摘要——随着大数据的发展&#xff0c;深度学习在多视图聚类上取得了显著进展。多视图融合是模型获得公共表示的关键技术。然而&#xff0c;现有文献采用的是浅层融合策略&…

alpha第五章 多态

1.instanceof Cat 2.Cat final 修饰符在 Java 中是用来表示不可修改或不可继承的意思。我们来逐一分析 final 修饰符在不同情况下的使用&#xff1a; 类&#xff1a;final 可以修饰类&#xff0c;表示该类不能被继承。 例如&#xff1a;final class MyClass { }这种情况下&…

前端工程化是什么?

‌前端工程化‌是指将前端开发的流程、工具和规范化进行系统化和自动化&#xff0c;以提高开发效率、代码质量和项目的可维护性。它涉及多个关键方面&#xff0c;包括模块化、打包构建、自动化测试、代码规范和持续集成/持续交付&#xff08;CI/CD&#xff09;等‌。 前端工程…

Intellij配置scala运行环境

文章目录 Intellij配置scala运行环境下载地址安装插件设置sdk与scala scala项目创建安装可能出现的错误 Intellij配置scala运行环境 下载地址 在centos7上安装intellij https://www.jetbrains.com/idea/download/other.html解压后进入文件夹启动打开ide ./idea-IC-232.1033…

ELK系列-(六)Redis也能作为消息队列?(下)

一、前文回顾 &#x1f50d; 在前面的ELK系列中&#xff0c;我们已经搭建了ELK的核心组件&#xff0c;包括&#xff1a; ELK系列-&#xff08;一&#xff09;Docker部署ELK核心组件ELK系列-&#xff08;二&#xff09;LogStash数据处理的瑞士军刀ELK系列-&#xff08;三&…