文件读写操作之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();  

七、总结

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

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/779458.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea使用技巧---超实用的mybatisX插件

一、使用原因 传统创建mybatis项目之后&#xff0c;在mapper接口和xml映射文件之间手动切换非常麻烦&#xff1a;不仅需要记住文件的所在位置&#xff0c;而且每次在mapper当中添加一个新的接口&#xff0c;都需要单独手动点开xml再编写sql&#xff1b; eg&#xff1a;在item…

前端面试题22(js中sort常见的用法)

JavaScript 的 sort() 方法是数组的一个非常强大的功能&#xff0c;用于对数组的元素进行排序。这个方法直接修改原数组&#xff0c;并返回排序后的数组。sort() 的默认行为是将数组元素转换为字符串&#xff0c;然后按照字符串的 Unicode 字典顺序进行排序。这意味着如果你试图…

优化路由,优化请求url

1、使用父子关系调整下使其更加整洁 2、比如说我修改了下url,那所有的页面都要更改 优化&#xff1a;把这个url抽出来&#xff0c;新建一个Api文件夹用于存放所有接口的url&#xff0c;在业务里只需要关注业务就可以 使用时 导包 发请求 如果想要更改路径&#xff0c;在这里…

docker-compose Install gitlab 17.1.1

gitlab 前言 GitLab 是一个非常流行的开源 DevOps 平台,用于软件开发项目的整个生命周期管理。它提供了从版本控制、持续集成/持续部署(CI/CD)、项目规划到监控和安全的一系列工具。 前提要求 Linux安装 docker docker-compose 参考Windows 10 ,11 2022 docker docker-c…

Zookeeper分布式锁原理说明【简单易理解】

Zookeeper 非公平锁/公平锁/共享锁 。 1.zookeeper分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下&#xff0c;性能会下降的比较厉害&#xff0c;主要原因是&#xff0c;所有的连接都在对同一个节点进行监听&#xff0c;当服务器检测到删除事件时&#xff0c;要通知…

【Kafka】Kafka生产者开启幂等性后报错:Cluster authorization failed.

文章目录 背景解决服务端配置ACL增加授权 背景 用户业务需求&#xff0c;需要开启生产者的幂等性&#xff0c;生产者加了配置&#xff1a;enable.idempotence true用户使用的集群开启了ACL认证&#xff1a;SASL_PLAINTEXT/SCRAM-SHA-512用户生产消息时报错&#xff1a;org.ap…

惕佫酰假托品合酶的发现-文献精读28

Discovering a mitochondrion-localized BAHD acyltransferase involved in calystegine biosynthesis and engineering the production of 3β-tigloyloxytropane 发现一个定位于线粒体的BAHD酰基转移酶&#xff0c;参与打碗花精生物合成&#xff0c;并工程化生产惕佫酰假托品…

Git在多人开发中的常见用例

前言 作为从一个 svn 转过来的 git 前端开发&#xff0c;在经历过git的各种便捷好处后&#xff0c;想起当时懵懂使用git的胆颤心惊&#xff1a;总是害怕用错指令&#xff0c;又或者遇到报错就慌的场景&#xff0c;想起当时查资料一看git指令这么多&#xff0c;看的头晕眼花&am…

Java继承和多态

一.继承 继承顾名思义即一方可以把另一方的东西啊传承到自己手里。 例如猫和狗都是动物。动物都有吃饭&#xff0c;喝水等行为&#xff0c;也有年龄&#xff0c;体重的属性。 那么我们在定义猫和狗的时候就没必要去重复写&#xff0c;而是我们可以定义一个动物类&#xff0c…

[Labview] 改写表格内容并储存覆盖Excel

在上一个功能的基础上&#xff0c;新增表格改写保存功能 [Labview] Excel读表 & 输出表单中选中的单元格内容https://blog.csdn.net/Katrina419/article/details/140120584 Excel修改前&#xff1a; 修改保存后&#xff0c;动态改写储存Excel&#xff0c;并重新写入新的表…

这款新的 AI 语音助手击败了 OpenAI,成为 ChatGPT 最受期待的功能之一

OpenAI 推迟了 ChatGPT 令人印象深刻的语音模式&#xff0c;这让许多 AI 聊天机器人的粉丝感到不安&#xff0c;但他们现在可能已经被挖走了。法国人工智能开发商 Kyutai 推出了一款名为 Moshi 的实时语音 AI 助手。 Moshi 旨在通过语音&#xff08;如 Alexa 或 Google Assista…

matlab 花瓣线绘制

matlab 花瓣线绘制 clc,clear,close all; % 创建一个范围内的 x 和 y 值 x linspace(-1.5, 1.5, 100); y linspace(-1.5, 1.5, 100);% 创建一个网格来表示 x 和 y 值的组合 [X, Y] meshgrid(x, y);% 计算方程的左边和右边的值 LHS1 X.^2 Y.^2; RHS1 X.^4 Y.^4;LHS2 X.…

如何在前端网页实现live2d的动态效果

React如何在前端网页实现live2d的动态效果 业务需求&#xff1a; 因为公司需要做机器人相关的业务&#xff0c;主要是聊天形式的内容&#xff0c;所以需要一个虚拟的卡通形象。而且为了更直观的展示用户和机器人对话的状态&#xff0c;该live2d动画的嘴型需要根据播放的内容来…

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。以下是对这两个模式的详细解析: Calibration(校准)模式 目的与功能: 校准模式主要用于优化和补偿由…

冯诺依曼体系结构与操作系统(Linux)

文章目录 前言冯诺依曼体系结构&#xff08;硬件&#xff09;操作系统&#xff08;软件&#xff09;总结 前言 冯诺依曼体系结构&#xff08;硬件&#xff09; 上图就是冯诺依曼体系结构图&#xff0c;主要包括输入设备&#xff0c;输出设备&#xff0c;存储器&#xff0c;运算…

RabbitMQ快速入门 - 图像化界面的简单操作

目录 1、RabbitMQ的安装 2、RabbitMQ基本介绍 3、简单案例 4、数据隔离 1、RabbitMQ的安装 官网链接&#xff1a;rabbitmq官网 &#xff08;官网很详细&#xff0c;也可以在官网学习啦~&#xff09; 基础入门&#xff1a;自主学习&#xff1a;最新版本&#xff1a;安装我…

【3D->2D转换(1)】LSS(提升,投放,捕捉)

Lift, Splat, Shoot 这是一个端到端架构&#xff0c;直接从任意数量的摄像头数据提取给定图像场景的鸟瞰图表示。将每个图像分别“提升&#xff08;lift&#xff09;”到每个摄像头的视锥&#xff08;frustum&#xff09;&#xff0c;然后将所有视锥“投放&#xff08;splat&a…

ubuntu下载Nginx

一、Nginx下载安装&#xff08;Ubuntu系统&#xff09; 1.nginx下载 sudo apt-get install nginx2.nginx启动 启动命令 sudo nginx重新编译(每次更改完nginx配置文件后运行&#xff09;&#xff1a; sudo nginx -s reload3.测试nginx是否启动成功 打开浏览器访问本机80端口…

【Python进阶】函数的扩展

函数 目录 函数 一、容器知识补充 1、字典遍历方法 2、遍历字典元素 keys()方法&#xff1a; values()方法&#xff1a; items()方法&#xff1a; 3、公共运算符 4、公共方法 二、函数介绍 1、函数的概念 2、引入函数 3、函数定义与调用 4、函数的参数 5、函数…

[Leetcode 128][Medium] 最长连续序列

目录 题目描述 整体思路 具体代码 题目描述 原题链接 整体思路 首先看到找连续升序排序的最长序列长度&#xff0c;想到对数组进行排序预处理。但是排序算法时间复杂度需要O(nlogn)&#xff0c;题目要求时间复杂度为O(n)。因此不能进行排序与处理 接着想到数据结构哈希表&a…