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

目录

一、前言

二、c语言文件读写

1.写文件

2.读文件

三、c++文件读写

1.写文件

2.读文件

四、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.写文件

        示例代码为:

	// 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.读文件

        示例代码为:

    // 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.写文件

       示例代码为:

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

         示例代码为:

    // 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.写文件

        示例代码为:

  	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.读文件   

        示例代码为:

	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.写文件

        示例代码为: 

	CFile file("4.txt",CFile::modeCreate | CFile::modeWrite);

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

	file.Close();
2.读文件

        示例代码为:

    CFile file("4.txt", CFile::modeRead);

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

	file.Close();

	MessageBox(szBuf);

六、Qt文件读写

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

1.写文件

        示例代码为: 

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

        示例代码为: 

    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();  

七、总结

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

        

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大卫的纯爱战士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值