文件读写操作之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.rhkb.cn/news/377138.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV解决验证码(数字和字母)识别(Python)

文章目录 前言一、准备验证码图片 前言 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库。它支持Windows、Linux、Mac OS、Android和iOS等多个操作系统&#xff0c;提供了丰富的图像处理和计算机视觉功能&#xff0c;包括但…

链路追踪系列-01.mac m1 安装zipkin

下载地址&#xff1a;https://hub.docker.com/r/openzipkin/zipkin jelexjelexxudeMacBook-Pro zipkin-server % pwd /Users/jelex/Documents/work/zipkin-server 先启动Es: 可能需要先删除 /Users/jelex/dockerV/es/plugins 目录下的.DS_Store 当端口占用时再次启动&#x…

Qt+ESP32+SQLite 智能大棚

环境简介 硬件环境 ESP32、光照传感器、温湿度传感器、继电器、蜂鸣器 基本工作流程 上位机先运行&#xff0c;下位机启动后尝试连接上位机连接成功后定时上报传感器数据到上位机&#xff0c;上位机将信息进行处理展示判断下位机传感器数据&#xff0c;如果超过设置的阈值&a…

【Wamp】局域网设备访问WampServer | 使用域名访问Wamp | Wamp配置HTTPS

局域网设备访问WampServer 参考&#xff1a;https://www.jianshu.com/p/d431a845e5cb 修改Apache的httpd.conf文件 D:\Academic\Wamp\program\bin\apache\apache2.4.54.2\conf\httpd.conf 搜索 Require local 和Require all denied&#xff0c;改为Require all granted <…

【排序算法】计数排序

目录 一.基本思想 二.缺陷及优化 三.代码实现 四.特性总结 1.可以排序负数 2.适合范围集中的整数 3.时间复杂度&#xff1a;O(Nrange) 4.空间复杂度&#xff1a;O(range) 5.稳定性&#xff1a;稳定 一.基本思想 根据待排序数组a创建一个新的数组count&#xff0c;该数组…

python--实验 11 模块

目录 知识点 模块基础 模块使用方式 自定义模块示例 模块的有条件执行 Python包结构 定义和导入包 常用第三方库及安装 实例代码 第三方库自动安装脚本 Python标准库介绍 PyInstaller 小结 实验 1.(基础题)制作文本进度条。 2.(基础题) 蒙特卡罗方法计算圆周率…

nginx正向代理、反向代理、负载均衡

nginx.conf nginx首要处理静态页面 反向代理 动态请求 全局模块 work processes 1; 设置成服务器内核数的两倍&#xff08;一般不不超过8个超过8个反而会降低性能一般4个 1-2个也可以&#xff09; netstat -antp | grep 80 查端口号 *1、events块&#xff1a;* 配置影响ngi…

深度学习基础:Numpy 数组包

数组基础 在使用导入 Numpy 时&#xff0c;通常给其一个别名 “np”&#xff0c;即 import numpy as np 。 数据类型 整数类型数组与浮点类型数组 为了克服列表的缺点&#xff0c;一个 Numpy 数组只容纳一种数据类型&#xff0c;以节约内存。为方便起见&#xff0c;可将 Nu…

Linux多线程编程-生产者与消费者模型详解与实现(C语言)

1.什么是生成者与消费者模型 生产者-消费者模型是并发编程中的经典问题&#xff0c;描述了多个线程&#xff08;或进程&#xff09;如何安全、有效地共享有限的缓冲区资源。在这个模型中&#xff0c;有两种角色&#xff1a; 生产者&#xff08;Producer&#xff09;&#xff1…

Docker 安装ros 使用rviz 等等图形化程序

Docker 安装ros 使用rviz 等等图形化程序 ubuntu 版本与ros 发行版本对应 如何安装其它版本ros 此时考虑使用docker 易于维护 地址&#xff1a; https://hub.docker.com/r/osrf/ros 我主机是 ubuntu22.04 使用这个标签 melodic-desktop-full 1 clone 镜像到本机 docker pu…

OpenCV:python图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

前言 仅供个人学习用&#xff0c;如果对各位朋友有参考价值&#xff0c;给个赞或者收藏吧 ^_^ 一. cv2.getRotationMatrix2D(center, angle, scale) 1.1 参数说明 parameters center&#xff1a;旋转中心坐标&#xff0c;是一个元组参数(col, row) angle&#xff1a;旋转角度…

html(抽奖设计)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>抽奖</title><style type"text/css">* {margin: 0;padding: 0;}.container {width: 800px;height: 800px;border: 1px dashed red;position: absolut…

<数据集>光伏板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2400张 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Crack,Grid,Spot] 序号类别名称图片数框数1Crack8688922Grid8248843S…

近期几首小诗汇总-生活~卷

生活 为生活飘零&#xff0c;风雨都不阻 路见盲人艰&#xff0c;为她心点灯 贺中科大家长论坛成立十五周年 科学家园有喜贺 园外丑汉翘望中 曾一学子入我科 正育科二盼长大 憧憬也能入此家 与科学家论短长 园外翘首听高论 发现有隙入此坛 竟然也能注册成 入园浏览惶然立 此贴…

零信任的架构结合模块化沙箱,实现一机两用的解决方案

零信任沙箱是深信达提出的一种数据安全解决方案&#xff0c;它将零信任原则与SDC沙箱技术的优势相结合。零信任原则是一种安全概念&#xff0c;核心思想是“永不信任&#xff0c;总是验证”。它要求对每一个访问请求都进行严格的身份验证和授权&#xff0c;无论请求来源于内部还…

Qt Quick qml自定义控件:qml实现电池控件

qml入门进阶专栏地址:https://blog.csdn.net/yao_hou/category_9951228.html?spm=1001.2014.3001.5482 本篇博客介绍如何使用qml来实现电池控件,效果图如下: 下面给出实现代码 Battery.qml /*电池组件*/import QtQuick 2.15 import QtQuick.Controls 2.15Rectangle {id: b…

ES13的4个改革性新特性

1、类字段声明 在 ES13 之前,类字段只能在构造函数中声明, ES13 消除了这个限制 // 之前 class Car {constructor() {this.color = blue;this.age = 2

EXSI 实用指南 2024 -编译环境 Ubuntu 安装篇(二)

1. 引言 在当今的虚拟化领域&#xff0c;VMware ESXi 是备受推崇的虚拟化平台&#xff0c;广泛应用于企业和个人用户中。它以卓越的性能、稳定的运行环境和丰富的功能&#xff0c;为用户提供了高效的硬件资源管理和简化的 IT 基础设施维护。然而&#xff0c;如何在不同操作系统…

STM32第十九课:FreeRTOS移植和使用

目录 需求一、FreeRtos概要二、移植FreeRtos1.复制源码2.内存空间分配和内核相关接口3.FreeRTOSConfig.h4.在工程中添加.c.h 三、任务块操作1.创建任务2.任务挂起&#xff0c;恢复&#xff0c;删除 四、需求实现代码 需求 1.将FreeRtos&#xff08;嵌入式实时操作系统&#xf…

ts使用typeorm实现db创建

1.新建基础架构 ①创建项目文件名, mkdir ‘名称’ ->cd ‘文件名’ -> mkdir ‘src’->npm init mkdir fileName cd fileName mkdir src npm init在当前项目名目录下执行npm init,按照默认执行就会创建package.json. 之后执行 npm i jest/globals casl/ability bcr…