C++学习笔记之对文件的操作2

转载自**

https://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126680.html

**
什么都不说了,继续《C++学习笔记之对文件的操作<1>》的内容…

=功能展示

打开文件的方式
当我们想要打开的文件不存在的时候,一般地,ofstream类的对象会默认地自动创建一个文件。而如果我们想要打开的文件是存在的,那么就会调用ofstream的构造函数或者是调用open()函数进行打开。下面,我们来看一下MSDN上面是如何定义open()函数的:

首先是函数原型:

void open(const char *_Filename,ios_base::openmode _Mode = ios_base::in | ios_base::out,int _Prot = (int)ios_base::_Openprot
);
void open(const char *_Filename,ios_base::openmode _Mode
);
void open(const wchar_t *_Filename,ios_base::openmode _Mode = ios_base::in | ios_base::out,int _Prot = (int)ios_base::_Openprot
);
void open(const wchar_t *_Filename,ios_base::openmode _Mode
);

接下来是参数的说明:

复制代码

_Filename
The name of the file to open.
打开文件名_Mode
One of the enumerations in ios_base::openmode.
文件的打开方式(在ios_base::openmode中定义)_Prot
The default file opening protection.
默认进行文件打开时的保护

复制代码
OK,我们再来看看ios_base::openmode中定义的打开方式:

复制代码

ios::in, to permit extraction from a stream.

打开文件进行读操作,即读取文件中的数据

ios::out, to permit insertion to a stream.

打开文件进行写操作,即输出数据到文件中

ios::app, to seek to the end of a stream before each insertion.

打开文件之后文件指针指向文件末尾,只能在文件末尾进行数据的写入

ios::ate, to seek to the end of a stream when its controlling object is first created.

打开文件之后文件指针指向文件末尾,但是可以在文件的任何地方进行数据的写入

ios::trunc, to delete contents of an existing file when its controlling object is created.

默认的文件打开方式,若文件已经存在,则清空文件的内容

ios::binary, to read a file as a binary stream, rather than as a text stream.

打开文件为二进制文件,否则为文本文件
复制代码
好了,open()函数的用法全部列举出来了。下面就针对ios_base::binary的二进制打开方式,我们在来谈一谈二进制文件的输出方式和文本文件的输出方式。

① 文本形式输出到文件,我们完全可以在open函数的mode选项中调用

ios::out|ios::app
好了,上面这句话说的就是将数据依次输出。注意,这里用的是依次,原因就是我们采用了app(append)模式,此表示在文件末尾继续写入文件,这就实现了数据的挨个写入 _。一个完整的程序例子如下:

#include <iostream>
#include<fstream>
using namespace std;
const int num=20;
struct people
{char name[num];double weight;int tall;int age;char sex;
};
int main()
{people pe={"李勇",78.5,181,25,'f'};ofstream fout("people.txt",ios::out|ios::app);fout<<pe.name<<" "<<pe.age<<" "<<pe.sex<<" "<<pe.tall<<" "<<pe.weight<<" "<<"\n";fout.close();ifstream fin("people.txt");char ch[255];fin.getline(ch,255-1,0);cout<<ch;fin.close();return 0;
}

输出如下:

在这里插入图片描述

  我们可以看到,people.txt文件中的内容和命令行中的一样。② 二进制形式输出到文件 为了能够让其用二进制方式输出文件,我们只需要把上面程序的第16行和17行换做

1
2

ofstream fout("people.txt",ios::binary);
fout.write((char*)&pe,sizeof pe);

程序的第1行中的标志binary用于开启二进制模式,第2行调用了write函数。该函数有两个参数,第一个是要写入数据的首地址,在这里是结构体pe的地址,而第二个参数是要写入的字符数目,这里我们用sizeof来计算pe的字符数。具体程序如下:

#include <iostream>
#include<fstream>
using namespace std;
const int num=20;
struct people
{char name[num];double weight;int tall;int age;char sex;
};
int main()
{people pe={"李勇",78.5,181,25,'f'};ofstream fout("people.txt",ios::binary);fout.write((char*)&pe,sizeof pe);fout.close();people pe1={"张玲",65.4,165,62,'m'};ifstream fin("people.txt",ios::binary);fin.read((char*)&pe1,sizeof pe1);cout<<pe1.name<<" "<<pe1.age<<" "<<pe1.sex<<" "<<pe1.tall<<" "<< pe1.weight <<" "<<"\n";fin.close();return 0;
}

我们再来看看这个东东的输出,我们可以看到,以txt文档打开文件时候,会产生乱码。这就是因为txt文件是以文本方式打开的,所以我们看到的都是乱码。如下图:

在这里插入图片描述
呼呼,以上就是我自认的自己不是很懂的C++关于如何操作文件的记录,到这里了~~全文完 _

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

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

相关文章

前端学习(1802):前端调试之事件伪类练习

index.html <!DOCTYPE html> <html lang"en"><head> <!--系统内置 start--> <script type"text/javascript"></script> <!--系统内置 end--><meta charset"UTF-8"><title>练习</titl…

eclipse中git解决冲突

https://www.cnblogs.com/haimishasha/p/5980416.html

C++如何产生随机数

转载自** https://www.cnblogs.com/ql698214/p/5424937.html ** 一、使用rand()函数 头文件<stdlib.h> (1) 如果你只要产生随机数而不需要设定范围的话&#xff0c;你只要用rand()就可以了&#xff1a;rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在s…

Leetcode016 3Sum Closest

public class S016 {//借鉴S015的思想&#xff0c;只是稍微有点慢public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int result nums[0]nums[1]nums[nums.length-1];for(int i 0;i<nums.length;i){if(i>0&&nums[i]nums[i-1])continue;in…

前端学习(1809):前端调试之微博头部开发

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>微博实战--head&l…

优知学院

http://youzhixueyuan.com/single-architecture-soa-micro-service-differentiation.html

数据结构实验四 排序算法的实现

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416&#xff09; 2019年6月4日 学院 计算机科学与教育软件学院 年级、专业、班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验四 排序算法 指导老…

POJ1155 TELE(树形DP)

题目是说给一棵树&#xff0c;叶子结点有负权&#xff0c;边有正权&#xff0c;问最多能选多少个叶子结点&#xff0c;使从叶子到根的权值和小于等于0。 考虑数据规模表示出状态&#xff1a;dp[u][k]表示在u结点为根的子树中选择k个叶子结点的最小权值 最后就从d[1][k]中找满足…

数据结构实验五 查找算法的实现

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416B&#xff09; 2019年6月11日 学院 计算机科学与教育软件学院 年级、专业、班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验五 查找算法 指导…

margin和padding的区别

https://www.cnblogs.com/zxnn/p/8186225.html

前端学习(1811):前端调试之css装饰cursor练习

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…

真机调试及上线简略流程

真机调试&#xff1a; 参考完整图文教程 --》生成证书公钥文件 --》系统应用程序-使用工具-钥匙串访问--》证书助理--》从证书颁发机构请求证书--》默认选项--》存到磁盘--》继续--》生成CertificateSigningRequest.certSigningRequest公钥文件--》生成开发证书 --》开发者管理…

数据结构实验六 综合数据处理

广州大学学生实验报告 开课实验室&#xff1a;计算机科学与工程实验&#xff08;电子楼416A&#xff09; 2019年6月14日 学院 计算机科学与教育软件学院 年级、专业、班 计算机大类 144班 姓名 学号 实验课程名称 数据结构实验 成绩 实验项目名称 实验六…

JAVA高并发秒杀系统构建之——高并发优化分析

https://blog.csdn.net/yd201430320529/article/details/70544203

CSS中的text-shadow。

text-shadow&#xff08;文字投影&#xff09;&#xff0c;box-shadow&#xff08;容器投影&#xff09;&#xff0c;border-radius&#xff08;圆角&#xff09;这三个属性估计以后用的比较多&#xff0c;记录 一下。目前不支持IE系列&#xff08;不过可以使用其他方法实现&am…

计组课程设计

计算机组成与系统结构课程设计实验报告 学院&#xff1a; 计算机学科与网络工程学院 专业班级&#xff1a; 计算机科学与技术172 姓名&#xff1a; 学号&#xff1a; 2019.06.…

阿里云人脸识别sdk

https://help.aliyun.com/document_detail/64074.html?spma2c4g.11186623.6.566.107a1619AfifHp

前端学习(1803):前端调试之事件伪类练习二

index.html <!DOCTYPE html> <html lang"en"><head><!--系统内置 start--><script type"text/javascript"></script><!--系统内置 end--><meta charset"UTF-8"><title>练习</title&g…