文件读写操作之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.mzph.cn/news/870976.shtml

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

相关文章

面向对象机考指南

目录 Eclipse使用 调字体大小 Ptg to JavaBean 解决控制台消失问题 第三题大题 控制台 Eclipse使用 调字体大小 Window —> Preferences 搜索font 点击Color and Fonts 找到Java 展示字体 这个这个 即可调节字体大小 Ptg to JavaBean 生成 空参构造 带参构造 gett…

C++基础(一)

目录 1.不同版本的hello word&#xff01; 2.namespace和&#xff1a;&#xff1a;域作用限定符以及using 2.1 namespace 2.2&#xff1a;&#xff1a; 2.3using用于展开域 3.C输入和输出 4.缺省参数 5.重载 6.引用 6.1引用介绍 6.2 引用的特性 注意&#xff1a; 6.4 c…

win11用户由中文名改为英文名

目录 前情提要 一喜一悲&#xff1a;找回“消失”的文件&#xff0c;却失去新建文件的权限。 找回“消失”的文件 ​编辑 失去新建文件的权限 核心问题&#xff1a;怎么解决右键只建立文件夹&#xff1f; 弯路1&#xff1a;获取管理员权限 弯路2&#xff1a;获取管理员权…

Linux基础(权限)+mysql(函数)+初始shell

[rootcentos ~]# whereis test.c test: /usr/bin/test /usr/share/man/man1/test.1.gz /usr/share/man/man1p/test.1p.gz [rootcentos home]# zip -r my.zip lesson1 将目录设为zip unzip my.zip -d xxxxxx 可指定要减压到的位置。 tar [-cxtzjvf] 文件与目录 .... 参数&…

python自动化之用flask库写一个登陆接口(代码示例)

用到的库&#xff1a; 1、flask&#xff08;写接口&#xff09; 2、cerberus&#xff08;校验数据&#xff09; 实现效果&#xff1a;输入账号和密码&#xff0c;校验数据类型是否是字符串&#xff0c;如果是&#xff0c;返回登陆成功&#xff1b;如果不是&#xff0c;返回数…

UnityHub 无法添加模块问题

文章目录 1.问题描述2.问题解决 1.问题描述 在Hub中无法添加模块 2.问题解决 1、点击设置 2、设置版本安装位置 可以发现installs的安装位置路径设置不是unity安装位置&#xff0c;这里我们更改成自己电脑unity安装位置的上一级路径 添加模块正常&#xff1a;

【C++】哈希表的模拟实现及 unordered_set 和 unorderded_map 的封装

目录 前言一、哈希表的模拟实现1.1 哈希表的改造1.1.1 模板参数列表的改造1.1.2 增加迭代器操作 1.2 哈希表的模拟实现1.2.1 哈希表中仿函数的实现1.2.2 哈希表中节点类的实现1.2.3 哈希表中迭代器类的实现1.2.4 哈希表中构造函数、析构函数和 Clear() 函数的实现1.2.5 哈希表中…

阐述 C 语言中的浮点数精度问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&…

matlab支持向量机使用错误

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

ROS的TF系统

一、SLAM 1、SLAM全称是Simultaneous Localization And Mapping&#xff0c;即同时定位与地图构建 2、SLAM软件包Hector_Mapping&#xff0c;←建图可参考链接所示文章 二、机器人定位 1、假设机器人开始建图的位置是地图坐标系的原点 2、则机器人在建图过程中的位置可以描…

DenseNet算法实现乳腺癌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、前期准备 1.设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import …

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…

黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录 Day4

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会…

HDFS Decommission节点的长尾分析和问题解决

文章目录 前言Decommission过慢的分析过程NameNode页面并不显示Decommission的进度和剩余块数量增加每次调度的块数量增加Stream Limit以避免节点被Skip节点被Skip时应该在DEBUG时打印原因在大量节点被Skip的时候加快有效调度其他可能改进 基本流程解析用户通过节点刷新触发Dec…

java Web学习笔记(一)

文章目录 1. 前置学习知识2. Tomcat介绍Tomcat目录文件介绍URL的组成部分和项目资源的对应关系idea配置部署tomcat并成功运行一个app-web项目 3. HTTP协议介绍&#xff08;很重要&#xff09;HTTP协议和HTTPS的区别HTTP协议的发展理解HTTP协议 报文格式报文响应的状态码 4. Ser…

以设备为核心的状态自动采集、人工运维和预测性维护为一体的智能管理系统

中服云设备全生命周期管理系统充分利用物联网、人工智能、机器学习、大数据等新一代技术&#xff0c;实现对企业生产设备从采购、安装、调试、使用、维护、维修、改造、更新直到报废全生命周期的智能化、数字化、可视化的实时管控&#xff0c;支持设备运行状态的自动采集和人工…

js 中 new Worker 报错 Failed to construct ‘Worker‘

new Worker("worker.js");运行多线程 Web Worker 的时候报错 Uncaught DOMException: Failed to construct ‘Worker’ 原因是浏览器不允许通过本地文件访问使用Web Worker。 解决方法&#xff1a; 将项目部署到服务器上或者用Node起本地服务访问项目

活动回顾|矩阵起源2024WAIC圆满落幕

2024年7月4日至7日&#xff0c;全球瞩目的2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC 2024&#xff09;在上海盛大举行&#xff0c;其中Future Tech 100未来之星创新孵化展再次成为大会焦点&#xff0c;它不仅是一场科技成果的展示&#xff0c;更是全球…

网络通信基本知识

网络通信 什么是网络通信&#xff1f; 通信网络是指将各个孤立的设备进行物理连接&#xff0c;实现人与人&#xff0c;人与计算机&#xff0c;计算机与计算机之间进行信息交换的链路&#xff0c;从而达到资源共享和通信的目的。 什么是网络协议&#xff1f; 网络协议是计算机…

SPring Boot整合第三方框架

springboot整合第三方框架 1. 整合mybatis 1.1引入依赖——pom.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…