MFC文件操作

这篇具有很好参考价值的文章主要介绍了MFC文件操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘输入输出功能。通过他的派生类可以间接的支持文本、文件、内存文件等。

打开文件

通过对CFile类的初始化,即可完成文件的打开

CFile类的其中一个构造函数:

CFile(LPCTSTR lpszFileName, UINT nOpenFlags);
  • 参数lpszFileName

    表示文件名

  • 参数nOpenFlage

    表示打开方式

CFile打开文件模式总结,里面有几种模式可能是SDK中的高级模式,使用频率不高,不过应该可以在某种场合满足用户的一些高级要求。因为我没有用到过,所以可能翻译的理解上有偏差。如果以后有幸能理解透彻,再来斟酌修改吧。

打开模式 含义

 CFile::modeCreate

直接构建创建一个新文件。如果该文件已经存在,则文件内容自动被清零。

CFile::modeNoTruncate

该值一般modeCreate组合使用。如果创建的文件已经存在,那么它不会被清零。因而该文件能可靠的打开,或者新建一个文件或者打开一个现存文件。这对于打开一个可能存在可能不存在的设置文件十分有用。该选项通用可用于CStdioFile。

CFile::modeRead

以只读方式打开文件

CFile::modeReadWrite  

以可读可写方式打开文件。

CFile::modeWrite

以只写方式打开文件。

CFile::modeNoInherit

阻止文件被子进程继承。

CFile::shareDenyNone

以不拒绝其他进程对文件的读写方式打开。如果文件已经被其他进程以compatibility模式打开,则文件创建失败。

CFile::shareDenyRead

以拒绝其他进程对文件读的方式打开。如果文件已经被其他进程以compatibility模式或读打开,则文件创建失败。

CFile::shareDenyWrite

以拒绝其他进程对文件写的方式打开。如果文件已经被其他进程以compatibility模式或写打开,则文件创建失败。

CFile::shareExclusive

以exclusive方式打开,拒绝其他进程对文件的读写。如果该文件已经被不管任何进程以任何方式打开都构建失败。

CFile::shareCompat

此标志在32位MFC中无效。该标志当使用CFile::Open时映射为CFile::shareExclusive。

CFile::typeText

以文本方式打开。

CFile::typeBinary   

以二进制方式打开(只在派生类中使用)。

CFile::osNoBuffer

系统打开文件不开系统缓存。可查看Platform SDK中CreateFile的FILE_FLAG_NO_BUFFERING。

CFile::osWriteThrough

通过任何快速缓存并直接写磁盘的标志。可查看Platform SDK中CreateFile的FILE_FLAG_WRITE_THROUGH。

CFile::osRandomAccess

随机访问文件方式。系统使用这种方式优化文件缓冲区。

CFile::osSequentialScan

从开头到结尾的顺序访问文件方式。系统使用这种方式来优化文件缓冲区。可查看Platform SDK中CreateFile的FILE_FLAG_SEQUENTIAL_SCAN。

写文件 

写文件时,需调用类的Write函数

void CFile::Write(const void* lpBuf, UINT nCount);
  • 参数lpBuf

表示写入数据的缓冲区

  • 参数nCount

表示写入数据的字符数

读文件 

读文件时,调用类的Read函数 

UINT CFile::Read(void* lpBuf, UINT nCount);
  • 参数lpBuf

表示接收读取数据的缓冲区

  • 参数nCount

表示要读取数据的字符数

  • 返回值

返回读取到缓冲区的字节数 

在文件操作完毕后需要调用Close函数来关闭文件,如果在销毁对象之前尚未关闭文件,析构函数将为您关闭该文件。如果使用new在堆上分配对象,则必须在关闭 file.setsto 后将其删除。

获取文件长度 

我们可以使用CFile类的GetLength函数来获取文件的长度

virtual ULONGLONG CFile::GetLength() const;

该函数可以返回我们打开的文件长度 

Example 

代码示例:

写文件时,使用CFile::modeCreate和CFile::modeWrite模式初始我们的CFile类

//mfc文件操作
void CMyFileCFileView::OnMFCWriteFile() {
	//MFC提供的文件操作时CFile类
	CFile file(L"4.txt", CFile::modeCreate | CFile::modeWrite);	//CFile提供的其中一个构造函数
	file.Write("Hello World", strlen("Hello World"));
	file.Close();
}

读文件,首先获得文件的大小,根据大小new一个字符缓冲区接收读取的文件内容。 

//读文件
void CMyFileCFileView::OnMFCReadFile() {
	CFile file(L"4.txt", CFile::modeRead);	//CFile提供的其中一个构造函数
	char* pBuf;
	//获取文件大小
	DWORD dwFileLen = file.GetLength();

	pBuf = new char[dwFileLen + 1];

	file.Read(pBuf, dwFileLen);
	pBuf[dwFileLen] = 0;
	file.Close();
	USES_CONVERSION;
	CString strBuf = A2W(pBuf);
	MessageBox(strBuf);
}

运行结果: 

MFC文件操作 

CFileDialog 类

有时候我们希望能动态更改文件的读写位置,那么就可以使用CFileDialog类来实现这一功能。

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开文件存盘对话框功能。

下面代码示例了一种简单的文件存盘和打开对话框功能。文件的读取和写入使用的是MFC的文件读写。

文件保存:

下面这段程序更改了对话框标题,并限定保存的文件类型为.txt文本类型,当用户点击对话框确定按钮后,程序会读取用户输入的文件名,并将其保存为.txt类型。最后向文本内写入"Tom and Jerry"

void CMyFileCFileView::OnFileDialog() {
	CFileDialog fileDlg(FALSE);
	fileDlg.m_ofn.lpstrTitle = L"提示";//改标题
	fileDlg.m_ofn.lpstrFilter = _T("Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0");
	fileDlg.m_ofn.lpstrDefExt = L"txt";

	if (IDOK == fileDlg.DoModal()) {
		CFile file(fileDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite);
		USES_CONVERSION;
		char *szBuf = T2A(fileDlg.GetFileName());
		file.Write("Tom and Jerry", strlen("Tom and Jerry"));
		file.Close();
	}

}

文件读取: 

下面这段程序更改了对话框标题,并限定读取的文件类型为.txt文本类型,当用户点击对话框确定按钮后,程序会读取用户输入的文件名,并读取这个文件内容,之后通过消息框显示出来。

void CMyFileCFileView::OnFileDialogRead() {
	CFileDialog fileDlg(TRUE);
	fileDlg.m_ofn.lpstrTitle = L"提示";//改标题
	fileDlg.m_ofn.lpstrFilter = _T("Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0");
	if (IDOK == fileDlg.DoModal()) {
		CFile file(fileDlg.GetFileName(), CFile::modeRead);
		char* pBuf;
		DWORD dwFileLen = file.GetLength();
		pBuf = new char[dwFileLen + 1];
		pBuf[dwFileLen] = 0;
		file.Read(pBuf, dwFileLen);
		USES_CONVERSION;
		CString strBuf = A2W(pBuf);
		MessageBox(strBuf);
		file.Close();
	}

}

MFC文件操作 

CFileDialog的构造函数

explicit CFileDialog(
    BOOL bOpenFileDialog,
    LPCTSTR lpszDefExt = NULL,
    LPCTSTR lpszFileName = NULL,
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    LPCTSTR lpszFilter = NULL,
    CWnd* pParentWnd = NULL,
    DWORD dwSize = 0,
    BOOL bVistaStyle = TRUE
);
  • 参数bOpenFileDialog

指定要创建的对话框类型,TRUE表示文件打开对话框,FALSE表示文件另存为对话框

  • 参数lpszDefExt

表示默认文件扩展名

  • 参数lpszFileName

表示显示在“文件名”框中的初始文件名

 MFC文件操作

  • 参数 dwFlags

用于设置对话框的标志组合,例如标题。

  • 参数lpszFilter

指定文件的筛选器。如果指定文件筛选器,则只有与筛选条件匹配的文件才会显示在“文件”列表中。

MFC文件操作

  • 参数pParentWnd

指定文件对话框的父窗口或所有者的窗口指针

  • 参数dwSize

结构的大小。此值取决于操作系统版本。默认大小 0 表示 MFC 代码将根据运行程序的操作系统版本确定要使用的正确对话框大小。

 文章来源地址https://www.toymoban.com/news/detail-440636.html

到了这里,关于MFC文件操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在mfc的dll中提供自己DllMain

    概述 按照设计,MFC 的规则 Dll 具有 MFC 将自动提供一个默认 DllMain 函数。规则 Dll 不应提供自己 DllMain。应在规则 DLL 中的一个 CWinApp 派生类的 InitInstance 成员函数 DLL 加载时需要的任何初始化。取消初始化和终止代码应放在 ExitInstance 成员函数中 重写流程 第一步: 找到vs的mfc源

    2024年02月12日
    浏览(26)
  • C++笔记之基类指针动态地指向某一个子类情况列举

    code review!

    2024年02月12日
    浏览(49)
  • mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印

    h文件中添加 cpp文件中添加 左键按下弹起,右键按下弹起 TRACE(\\\"temp= %dn\\\", temp);

    2024年02月07日
    浏览(46)
  • libcurl是一个用于进行网络通信的开源库,提供了各种功能和选项,可以用于发送和接收HTTP请求、FTP操作等

    libcurl是一个用于进行网络通信的开源库,提供了各种功能和选项,可以用于发送和接收HTTP请求、FTP操作、SMTP邮件等。它支持多种协议,包括HTTP、HTTPS、FTP、FTPS、SMTP、POP3、IMAP等。 以下是libcurl库的一些特点和功能: 跨平台:libcurl可在多个操作系统上使用,包括Windows、Lin

    2024年01月19日
    浏览(50)
  • MFC——我的第一个MFC

    我的第一个MFC是在图像软件设计课程中创建的,使用Visual Studio 2022软件,基于C++语言,依赖freeimage图像库,实现在窗口应用中对一幅图像进行各种处理功能(如中值滤波等) 微软基础类库(Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库,以C++类的形式封装了W

    2024年02月06日
    浏览(64)
  • 两个pdf文件合并为一个怎么操作?分享pdf合并操作步骤

    不管是初入职场的小白,还是久经职场的高手,都必须深入了解pdf,特别是关于pdf的各种操作,如编辑、合并、压缩等操作,其中合并是这么多操作里面必需懂的技能之一,但是很多人还是不知道两个pdf文件合并为一个怎么操作,下面 不管是初入职场的小白,还是久经职场的

    2024年02月10日
    浏览(53)
  • 【编写LED驱动,创建三个设备文件,每一个设备文件和一个LED灯绑定,当操作这个设备文件时只能控制对应的这盏灯】

    编写LED驱动,创建三个设备文件,每一个设备文件和一个LED灯绑定,当操作这个设备文件时只能控制对应的这盏灯。 1.将GPIO的相关寄存器封装成结构体 -------- head.h 2.LED相关驱动文件 -------- led.c led0 ------ LED1 led1 ------ LED2 led2 ------ LED3 3.应用层测试文件 -------- test.c 实验结果

    2024年02月12日
    浏览(47)
  • MFC操作excel

    步骤: 安装microsoft的excel软件,因为只有ms的excel软件才提供了有关的类库 选中工程,添加类→MFC→Typelib中的MFC类 选中类库, 在可用类类型库中选择Microsoft Excel Object Library(据版本有可能细微之不同) 添加需要使用的接口,根据网上大部分人的说法和能满足我需要的类就只有

    2024年02月16日
    浏览(38)
  • MFC--对话框的一个画图控件-HighSpeedChart

    下载链接在最下面  (免费) 可在vs2022,vs2019等vs版本使用  成果展示 下载好文件后,将  整个文件夹,添加到项目中,  1.之后,将控件拖到对话框里,修改属性到与图片相同            2.为对话框添加类,我这里添加的是  3.为控件增加变量,因为不是VS自带的控件 4.点

    2024年02月04日
    浏览(84)
  • MFC自定义控件ID操作————MFC+Halcon学习中的那些坑

    趁着大三寒假抓紧学习halcon与mfc,为未来职业发展做准备,今天和大家分享一个我在学习mfc与halcon过程中踩到的坑,足足困扰了我半天.... 程序很简单..就是在halcon中读取摄像头,并且用mfc开发一个简单的界面,将视频显示出来,完成体内容如下 发现这个图片控件的ID有些奇怪

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包