文件读写操作之c语言、c++、windows、MFC、Qt

目录

一、前言

二、c语言文件读写

1.写文件

2.读文件

三、c++文件读写

1.写文件

2.读文件

[四、windows api文件读写](#四、windows api文件读写)

1.写文件

2.读文件

五、MFC文件读写

1.写文件

2.读文件

六、Qt文件读写

1.写文件

2.读文件

七、总结


一、前言

我们在学习过程中,学到的最多的感觉就是文件操作了,从学习c语言、c++再到Qt,都有它的影子,文件读写操作的方式有所不同,但都有各自的特点和用途。现在我总结了这五种写法,下面分别简要介绍这些环境下的文件读写操作方式。

二、c语言文件读写

在C语言它是面向过程的语言,文件操作主要通过一系列标准库函数实现,例如**fopen(), fread(), fwrite(), fclose()**等等。下面代码为示例,比较简单。

其中重点需要记住 fopen()函数,它的原型为:

FILE *fopen(const char *filename, const char *mode);

fopen函数的第二个参数 mode 是一个字符串,用于指定文件的打开模式。常用的有 "r" (以只读方式打开文件,文件必须存在), "w" (以只写方式打开文件。如果文件存在,则长度被截断为零,即该文件内容会消失,如果文件不存在则创建新文件),"a" , "r+",等等。

1.写文件

示例代码为:

cpp 复制代码
	// 1.打开文件
    FILE* pfile = fopen("1.txt","W");
	if (pfile == NULL)
	{
		MessageBox("fopen error");
		return;
	}
	char szBuf[1024] = "C语言写文件";
    // 2.写文件
	fprintf(pfile,szBuf);
    // 3.关闭文件
	fclose(pfile);
2.读文件

示例代码为:

cs 复制代码
    // 1.打开文件
	FILE* pfile = fopen("1.txt","r");
	if (pfile == NULL)
	{
		MessageBox("fopen error");
		printf("fopen error!");
		return;
	}
	char readBuf[1024] = { 0 };
	// 2.读文件
	fread(readBuf, 1, 1024, pfile);
	// 3.关闭文件
	printf("结果为:%s", readBuf);

三、c++文件读写

c++是面向对象的语言,所以说会创建一个文件流fstream 类,包括ifstream(输入文件流)、ofstream(输出文件流)和fstream(同时支持输入输出的文件流)。

1.写文件

示例代码为:

cpp 复制代码
	// 1. 创建文件流
	ofstream ofs("2.txt");
	char szBuf[1024] = "c++写文件";
	// 2. 写文件
	ofs.write(szBuf,strlen(szBuf) + 1);
	// 3. 关闭文件
	ofs.close();
2.读文件

示例代码为:

cpp 复制代码
    // 1. 创建文件流
	ifstream ifs("2.txt");
	char szBuf[1024] = { 0 };
	// 2. 读文件
	ifs.read(szBuf, 1024);
	// 3. 关闭文件
	ifs.close();
	std::cout << szBuf << std::endl;

四、windows api文件读写

Windows API 文件读写就要比较复杂了,Windows API提供了底层的文件操作函数,如CreateFile(), ReadFile(), WriteFile(), CloseHandle()等。CreateFile : 用于打开或创建文件、管道、邮件槽、通信设备等,并返回一个句柄,ReadFileWriteFile : 分别用于从文件句柄指向的文件中读取数据和向文件写入数据。**CloseHandle :**关闭一个打开对象的句柄。

我们大家都知道学习Windows系统比较难,主要因为是 API 用的都是自己封装的数据类型,学习过程中需要不断查阅文档和 API 原型。还一个主要原因是函数api的参数非常的多,有的甚至有十几个。。。。

1.写文件

示例代码为:

cpp 复制代码
  	HANDLE hFile;
    // 1. 创建文件
	hFile = CreateFile("3.txt", GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		printf("CreateFile Error");
		return;
	}
	// 2. 写文件
	char szBuf[1024] = "window api 写文件";
	DWORD dwWrites;
	WriteFile(hFile, szBuf, strlen(szBuf) + 1, &dwWrites, NULL);
	CloseHandle(hFile);
2.读文件

示例代码为:

cpp 复制代码
	HANDLE hFile;

	hFile = CreateFile("3.txt", GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		MessageBox("CreateFile Error");
		return;
	}
	// 2. 读文件
	char szBuf[1024] = { 0 };
	DWORD dwWrites;
	if (!ReadFile(hFile, szBuf, 1024, &dwWrites, NULL))
	{
		MessageBox("ReadFile Error");
		return;
	}
    printf("结果为: %s",szBuf);
	CloseHandle(hFile);

五、MFC文件读写

MFC就很简单了,写法上几乎和c++语法一样。

1.写文件

示例代码为:

cpp 复制代码
	CFile file("4.txt",CFile::modeCreate | CFile::modeWrite);

	char szBuf[1024] = "MFC写文件";
	file.Write(szBuf, strlen(szBuf) + 1);

	file.Close();
2.读文件

示例代码为:

cpp 复制代码
    CFile file("4.txt", CFile::modeRead);

	char szBuf[1024] = { 0 };
	file.Read(szBuf, file.GetLength());

	file.Close();

	MessageBox(szBuf);

六、Qt文件读写

在Qt中,读写文件是一个常见的操作,可以通过多种方式实现,但最常用和最直接的方法是使用QFileQTextStream类,或者使用QFileQDataStream类进行二进制数据的读写。

1.写文件

示例代码为:

cpp 复制代码
    QFile file("5.txt");  
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {  
        qDebug() << "无法打开文件写入";  
        return;  
    }  
  
    QTextStream out(&file);  
    out << "Qt写文件\n";   
  
    file.close();  
2.读文件

示例代码为:

cpp 复制代码
    QFile file("5.txt");  
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {  
        qDebug() << "无法打开文件读取";  
        return;  
    }  
  
    QTextStream in(&file);  
    QString line;  
    while (!in.atEnd()) {  
        line = in.readLine();  
        qDebug() << line;  
    }  
  
    file.close();  

七、总结

以上就是读写文件的所有示例写法了,虽然在语法上面都各不相同,但是在具体实现基本上都一样。都是按照三个步骤来实现,创建文件,读写文件,关闭文件,这些都不要求全部掌握,重要的理解斌且掌握这种代码思想。

相关推荐
Mr.Q39 分钟前
Qt多边形填充/不填充绘制
qt
霁月风1 小时前
设计模式——适配器模式
c++·适配器模式
弗锐土豆1 小时前
Windows系统中Oracle VM VirtualBox的安装
windows·虚拟机·virtualbox
秋の花1 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
jrrz08281 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
可峰科技1 小时前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
咖啡里的茶i1 小时前
Vehicle友元Date多态Sedan和Truck
c++
海绵波波1072 小时前
Webserver(4.9)本地套接字的通信
c++
@小博的博客2 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
爱吃喵的鲤鱼3 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++