MFC文件管理-学习笔记

ops/2024/11/3 1:55:10/
  1. CFileDialog封装用于文件打开操作或文件保存操作的常见对话框,继承于CCommonDialog
  2. CFileDialog的公共数据成员:m_ofn:Windows的OPENFILENAME结构,提供对基本文件对话框参数的访问权限
  3. 使用CFileDialog对象首先要使用构造参数创建该对象,然后设置m_ofn结构中的值初始化对话框控件的值或状态,初始化完成后需要调用CFileDialog::DoModal方法显示对话框,此时通过返回值为IDOK或IDCANCEL判断文件是否打开。
  4. 若要让用户选择多个文件,请在调用 DoModal 之前设置 OFN_ALLOWMULTISELECT 标志。 必须提供自己的文件名缓冲区才能容纳返回的包含多个文件名的列表。 为此,请在构造 CFileDialog 之后(但在调用 DoModal 之前)将 m_ofn.lpstrFile 替换为已分配的缓冲区的指针。
    此外,必须使用 m_ofn.lpstrFile 所指向的缓冲区中的字符数来设置 m_ofn.nMaxFile。 如果将要选择的最大文件数设置为 n,则所需的缓冲区大小为 n * (_MAX_PATH + 1) + 1。 缓冲区中返回的第一项是所选文件所在的文件夹的路径。
    例如:
#define MAX_CFileDialog_FILE_COUNT 99
#define FILE_LIST_BUFFER_SIZE ((MAX_CFileDialog_FILE_COUNT * (MAX_PATH + 1)) + 1)
CString fileName;
wchar_t* p = fileName.GetBuffer( FILE_LIST_BUFFER_SIZE );
**CFileDialog dlgFile(TRUE);
OPENFILENAME& ofn = dlgFile.GetOFN( );
ofn.Flags |= OFN_ALLOWMULTISELECT;
ofn.lpstrFile = p;
ofn.nMaxFile = FILE_LIST_BUFFER_SIZE;//设置缓冲区大小;
//*dlg.ofn.lpstrFilter*设置过滤文件类型
=_T("DAT FILES(*.cfg)\0*.cfg\0All Files(*.*)\0*.*\0\0");//\0加个0目前不知道意义,可读取多级文件夹中的cfg文件类型。
dlgFile.DoModal();**
fileName.ReleaseBuffer();
if(dlgFile.DoModal() != IDOK)
{
return 0;
}
  1. CFile类使用:在afx.h标头中

  2. 公共运算符为CFile::operator HANDLE --CFile 对象的句柄

  3. 公共数据成员有:CFile::hFileNull --确定CFile对象是否具有有效句柄

  4. 例如:if(MyFile.m_hFile != CFile::hFileNull)
    {
    }
    CFile::m_hFile --包含操作系统文件句柄

  5. CFile::Abort为关闭与此对象关联的文件并使改文件不可读取或写入,关闭软件失败时不会引发异常 例如:CStdioFile fileTest; TCHAR* pszFileName = _T("Abort_File.dat"); //执行可能导致异常的操作 CFileException ex; if (!fileTest.Open(pszFileName, CFile::modeWrite, &ex)) { ex.ReportError(); fileTest.Abort(); // 安全关闭文件 }
    使用CFile打开文件官方例子如下:

TCHAR* pszFileName = _T("c:\\test\\myfile.dat");
CFile myFile;
CFileException fileException;
if ( !myFile.Open( pszFileName, CFile::modeCreate |   CFile::modeReadWrite, &fileException ) )//fileException的作用是若打开文件出现问题则返回此错误对象,下方TRACE即为追踪打印文件名和指示失败原因代码,更详细的错误报告可使用AfxThrowFileException函数
{TRACE( _T("Can't open file %s, error = %u\n"),pszFileName, fileException.m_cause );
}

方法二:

HANDLE hFile = CreateFile(_T("CFile_File.dat"),GENERIC_WRITE, FILE_SHARE_READ,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{AfxMessageBox(_T("Couldn't create the file!"));
}
else
{// 将 CFile 对象附加到我们拥有的句柄。CFile myFile(hFile);static const TCHAR sz[] = _T("I love CFile!");// 向文件中添加数据myFile.Write(sz, sizeof(sz));// 我们需要显式调用 Close()。请注意,没有必要对 API 返回的句柄调用 CloseHandle(),因为Close() 会自动为我们调用 CloseHandle()。myFile.Close();

其中GENERIC_WRITE表示访问权限为调用放可对对象执行正常的写入操作,GENERIC_READ则表示可对对象执行正常的读取操作;
FILE_SHARE_READ表示请求文件或设备的共享模式,可读取、写入删除等属性,

0如果其他进程请求删除、读取或写入访问权限,则阻止其他进程打开文件或设备。
FILE_SHARE_DELETE启用对文件或设备上的后续打开操作以请求删除访问权限。
FILE_SHARE_READ允许对文件或设备执行后续打开操作以请求读取访问权限。
FILE_SHARE_WRITE允许对文件或设备执行后续打开操作以请求写入访问权限。
CREATE_ALWAYS表示对存在或不存在的文件或设备始终创建新文件:
CREATE_ALWAYS始终创建新文件。
如果指定的文件存在且可写,则函数将截断文件、函数成功
CREATE_NEW仅当该文件尚不存在时,才会创建一个新文件。
OPEN_ALWAYS始终打开文件。
如果指定文件存在,则函数成功
TRUNCATE_EXISTING打开一个文件并截断它,使其大小为零字节,仅当它存在时。
如果指定的文件不存在,该函数将失败
FILE_ATTRIBUTE_NORMAL表示文件或设备属性和标志,此值为默认值。

更详细创建文件描述链接:
如果对文件使用要求不那么高的情况下,可以直接:Cfile File;
CString Str;//文件路径
File.open(Str,CFile::modeCreate | CFile::modeWrite);
if(File == NULL)
{
//错误提示
}
else
{
//写入文件
}
File.Close();


http://www.ppmy.cn/ops/130571.html

相关文章

HCIA笔记

目录 一,OIS七层模型 二,拓扑类型 三,节点增加设备----HUB集线器 四,网桥——交换机——工作在介质访问控制层(单位:BP-S) 五,路由器原理 六,封装与解封装 七&…

【传知代码】图像处理解决种子计数方法

文章目录 一、背景及意义介绍研究背景农业考种需求传统计数方法的局限性人工计数仪器设备计数 研究意义提高育种效率提高计数准确性广泛的适用性数据存档与分析便利 二、概述三、材料与数据准备以及方法介绍整体流程图像采集图像预处理形态学操作腐蚀运算开运算 图像二值化种子…

[RoarCTF 2019]Easy Calc 1

[RoarCTF 2019]Easy Calc 1 审题 题目就是一个计算器。 看到源代码有 calc.php 进入看到waf的源代码 知识点 RCE 解题 审核代码 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str $_GET[num];$blacklist [ , \t, \r, \n,\, &q…

基于微信小程序的图书馆座位预约系统+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

稀疏检索器除了 TF-IDF、BM25 算法外

目录 稀疏检索器是一种信息检索技术 稀疏检索器除了 TF-IDF、BM25 算法外,还有以下几种: 稀疏检索器是一种信息检索技术 基本概念: 稀疏检索器使用稀疏表示来进行文本匹配。在这种表示方式下,文本被转换为一个向量,向量的维度大小通常为语料的词典大小。如果词典非常大,…

全新更新!Fastreport.NET 2025.1版本发布,提升报告开发体验

在.NET 2025.1版本中&#xff0c;我们带来了巨大的期待功能&#xff0c;进一步简化了报告模板的开发过程。新功能包括通过添加链接报告页面、异步报告准备、HTML段落旋转、代码文本编辑器中的文本搜索、WebReport图像导出等&#xff0c;大幅提升用户体验。 FastReport .NET 是…

显卡服务器和普通服务器之间的区别有哪些?

显卡服务器也被称之为GPU服务器&#xff0c;显卡服务器与普通的服务器之间有着很明显的区别&#xff0c;下面就让我们共同来了解一下吧&#xff01; 普通服务器的主要处理器通常都是配备的中央处理器&#xff0c;可以用于执行大部分通用计算任务和操作系统的管理&#xff1b;而…

金融小白两周完成一个量化系统 (二)项目进度以及数据获取

前言 这几天边写代码边思考&#xff0c;初期的想法现在有了点变化。上一篇提高&#xff0c;功能上分四个模块&#xff0c;现在我还需要再加一个方便个人查看股票实时动态的窗口。比如分时趋势图&#xff0c;实时行情&#xff0c;成交明细等 不得不吐槽下&#xff0c;vnpy 的K线…