Windows上读取文件的四种方法

51 阅读2分钟

创建项目

首先我们创建一个MFC项目。

image.png

项目目录下创建一个文件

在项目目录下,我们创建一个book.txt文件

image.png

清除按钮逻辑

首先我们编写下清除按钮的逻辑

void CMFCApplication2Dlg::OnBnClickedButton5()
{
	SetDlgItemText(IDC_EDIT1, TEXT(""));
}

读取文件方法一: 使用C语言API读取文件内容

点击Button1为调用C语言相关API函数读取文件

代码如下

void CMFCApplication2Dlg::OnBnClickedButton1()
{
	CString s = TEXT("************** C **********");
	char line[256];
	FILE* pFile = NULL; 
	// 打开文件
	errno_t err = fopen_s(&pFile, "book.txt", "r");

	if (err != 0) {
		printf("Failed to open , error code %d\n", err);
		return;
	}
	// 读取到缓冲中
	while (fgets(line, 256, pFile) != NULL) {
		s += line;
		s += TEXT("\r\n");
	}

	fclose(pFile);
	// 设置内容到编辑框中
	SetDlgItemText(IDC_EDIT1, s);
}

运行效果

image.png

读取文件方法二: 使用C++语言API读取文件内容

点击Button2为调用C语言相关API函数读取文件

代码如下

// 包含一下需要用的头文件
#include <fstream>

void CMFCApplication2Dlg::OnBnClickedButton2()
{
	CString s = TEXT("************** C++ **********");
	char line[256];

	// 输入文件流
	std::ifstream ifs("book.txt");

	// 每次读取一行
	while (ifs.getline(line, 256)) {
		s += line;
		s += TEXT("\r\n");
	}

	// 关闭文件
	ifs.close();

	// 设置内容到编辑框中
	SetDlgItemText(IDC_EDIT1, s);

}

运行效果

image.png

读取文件方法三: 使用Windows API读取文件内容

代码如下

void CMFCApplication2Dlg::OnBnClickedButton3()
{
	CString s = TEXT("************** Windows API **********");
	HANDLE hFile;   // 定义一个文件句柄

	CHAR lpFileDataBuffer[8192];   // 保存读取的文件内容

	DWORD dwReadedSize;     // 实际读取的大小

	ZeroMemory(lpFileDataBuffer, 8192);   // 字符数组初始化清零

	hFile = CreateFile(
		TEXT("book.txt"), // 打开的文件名
		GENERIC_READ,     // 读文件的方式
		FILE_SHARE_READ,  // 共享读
		NULL,             // 默认的安全属性
		OPEN_EXISTING,    // 打开已经存在的文件
		FILE_ATTRIBUTE_NORMAL, // 常规的文件属性
		NULL              // 不使用模板
		);

	// 读取文件内容
	ReadFile(hFile, lpFileDataBuffer, 8192, &dwReadedSize, NULL);

	// 关闭句柄

	CloseHandle(hFile);

	// 设置内容到编辑框中
	s += lpFileDataBuffer;
	SetDlgItemText(IDC_EDIT1, s);
}

运行效果

image.png

读取文件方法四: 使用MFC读取文件内容

MFC实际上内部的实现是对Windows API进行了一层包装

代码如下

void CMFCApplication2Dlg::OnBnClickedButton4()
{

	CString s = TEXT("************** MFC **********");
	CString line;
	CStdioFile file(TEXT("book.txt"), CFile::modeRead);   // 读模式打开文件

	// 读取文件
	while (file.ReadString(line)) {
		s += line;
		s += TEXT("\r\n");
	}

	SetDlgItemText(IDC_EDIT1, s);
}

运行效果

image.png