转载自**

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++关于如何操作文件的记录,到这里了~~全文完 _

C++学习笔记之对文件的操作2相关推荐

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

    转载自** https://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html ** =前言= 我们在编写程序的时候,最密不可分的就是对 ...

  2. 安卓学习笔记28:文件流操作

    文章目录 一.文件存储类型 (一)内部存储 1.内部文件概念 2.文件读写方法 3.缓存文件目录 (二)外部存储 1.外部文件概念 2.编程对SD卡数据读写 二.案例演示 - 文件操作 (一)运行结果 ...

  3. Serlvet学习笔记之四—对文件的操作

    1.读文件 package com.demo; import java.io.BufferedReader; import java.io.FileReader; import java.io.Pri ...

  4. Linux_红帽8学习笔记分享_3(文件操作管理)

    Linux_红帽8学习笔记分享_3(文件操作管理) 文章目录 Linux_红帽8学习笔记分享_3(文件操作管理) 1.Vi编辑器 1.1两种模式 1.2十种技巧 2.用户的家目录 2.1 su命令的使 ...

  5. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  7. Git 学习笔记 ignore 忽略文件

    Git 学习笔记 ignore .gitignore 文件 添加目标到 gitignore IDEA 中初始化 Git 仓库 问题 1. 无法添加到 gitignore (手动添加也没效果) 2. 文 ...

  8. Python学习笔记D9(文件)

    Python学习笔记D9(文件) 文件 1.打开文件 open(file, mode='r') 接收两个参数:文件名(file)和模式(mode),用于打开一个文件,并返回文件对象,如果该文件无法被打 ...

  9. Keras学习笔记---保存model文件和载入model文件

    Keras学习笔记---保存model文件和载入model文件 保存keras的model文件和载入keras文件的方法有很多.现在分别列出,以便后面查询. keras中的模型主要包括model和we ...

最新文章

  1. node.js 验证路径有效性_怎样识别光伏谐波路径?试试这个算法
  2. 第十八课.动态图模型
  3. ubuntu14.04 部署atlas
  4. python自学免费课堂-推荐5个Python爬虫免费学习资源(B站高赞!)
  5. RocketMQ-控制台的安装与启动
  6. 通用即插即用(UPnP)
  7. MySQL 创建视图
  8. python语言控制结构是指_python程序的三种控制结构
  9. Linux内核之XArray
  10. Linux就这个范儿 第8章 我是Makefile
  11. java drawpolygon_Java如何绘制和填充有孔的Polygon
  12. TCP握手协议的巧计方法
  13. three.js 文本_使用Three-bmfont-text在Three.js中创建文本
  14. 合批/批量渲染 (Batch)、实例化Instancing
  15. Linux如何查看端口
  16. 《数学分析(上)》重要概念复习
  17. 实现 Excel 多列数据组合
  18. 鸿蒙 background_element设置渐变色
  19. 小包实用工具:国家代码大全
  20. Microsoft Visual SourceSafe的使用

热门文章

  1. 前端学习(1862)vue之电商管理系统电商系统之绘制默认头像
  2. 前端学习(1745):前端调试值之查看元素最终样式
  3. 前端学习(1374):express参数中get参数的获取
  4. 前端学习(1355) 子模板
  5. 前端学习(1222):综合案例图书管理1
  6. 前端学习(1158):对象结构01
  7. 前端学习(554):node实现登录和注册第二部分代码
  8. git学习(8):windows系统下VI编辑器的基本使用
  9. java学习(62):java抽象类
  10. vue-cli 3.0集成sass/scss到vue项目