文件的读取操作

在程序设计中,文件常用的操作不外乎——打开、读、写、流指针操作、关闭。我日常中使用的比较多,但从来 没有细细总结今天就总结下具体的用法。

相关概念

计算机上的文件其实是数据的集合,对文件的读写其实是对数据的读写。

文件可以大致分为两种:文本文件和二进制文件。  

1、文本文件:它的每一个字节存放的是一个ASCII码,代表一个字符。

2、二进制文件:将内存中的数据按照其在内存中的存储形式原样存放在磁盘上。我们用记事本打开则是乱码。

文件的路径

文件的相对路径(重在理解)——英文的双引号

定义:目标文件相对于当前文件的路径。

表达形式:

(1)"./“或”.\”表示显示当前目录,也可以省略,表示默认当前目录

(2)”…/"或”…\”表示返回到上一级的目录。

(3)如果有多个上一级目录,可以使用多个“…/”或”…\”。

文件的打开方式

(三)文件的打开方式

ios::in 以输入方式打开文件,支持读数据流。如果文件不存在会找不到文件。

ios::out 以输出方式打开文件,支持写数据流。如果文件不存在则新建,如果文件存在就清空其原有内容。

ios::app 输出的数据追加到文件末尾,只支持读,不支持写

ios::ate 打开一个文件,并将指针定位到文件末尾

ios::trunc 打开一个文件,如果文件不存在则新建,如果存在,则清空原有文件中的内容

ios::binary 以二进制方式打开文件,如果不指定则默认采用文本方式打开文件

说明:

①缺省时,默认为以输出和输入方式打开文件,支持读和写数据流。

②当以多种形式打开文件时,中间用运算符”|”(或)连接起来。如:

ios::in | ios::out 以输出和输入方式打开文件

ios::out| ios::binary 以输出方式打开一个二进制文件

数据流对象指针(简称“流指针”)

对文件进行读写操作首先必须要定义一个数据流对象指针。数据流对象指针有三种类型,在这里我只介绍一种我最常用的方式:fstream(头文件#include<fstream>)

表示文件读取/写入流,对文件进行读和写操作,既可以将数据从存储设备读取到内存中,也可以将数据从内存写入存储设备中。

下面代码实例:

fstream  f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);//定义一个名为f1的数据流指针,并且以in/out/trunc方式打开文件,支持读和写操作。
if(!f1)cout<<"未找到文件"<<endl;

获取流指针的位置

(1)tellg( )

根据ANSI-C++ 标准,就是一个整数,代表当前读取流指针的位置;

long long m=f1.tellg( );//返回f1的位置

*设置读取流指针的位置

①seekg ( pos_type position );

(2)tellp( )

根据ANSI-C++ 标准,就是一个整数,代表当前写入流指针的位置;

long long m=f2.tellp( );//返回f2的位置

*设置写入流指针的位置

①seekp ( pos_type position );

文件的打开与关闭操作

*文件的open函数的具体使用:eg

         fstream f1,f2;//定义一个名为f1的数据流指针
f1.open("D:\\a.txt"); //以读和写方式打开D盘中的a.txt文件,与f1("F:\\DAAT.txt",ios::in | ios::out|ios::trunc);这种方式结果一致。
F2.open(“../a.txt”.ios::in);//以读方式打开当前目录的上级目录中的a.txt文件

*文件的关闭

文件的关闭非常重要,每次使用后必须关闭,不然会造成其他后果。

f1。close();
```即可
### 文本文件的写操作——符号”<<” ###
①定义一个数据指针流;(注:根据写操作选择对应的数据指针流类型)
②表达形式:数据指针流 << 被写入的对象;

char b[]="李虎ftv句柄饱和度iyivbh oguobhnynbubo8ubu0nn 88898 76y8 9980 bhh";

int i=0;

fstream f1("F:\DAAT.txt",ios::in | ios::out|ios::trunc);//定义一个名为f1的数据流指针

if(!f1)cout<<"未找到文件"<<endl;

f1.seekg(ios::beg); //重置数据流指针

for (i=0;i<strlen(b);i++)

{

f1<<b[i];//依次将数组里面的东西写入文件中。

}
### 文本文件的读操作——符号”>>” ###
①定义一个数据指针流;(注:根据读操作选择对应的数据指针流类型)
②表达形式:数据指针流 >> 读取后存储的对象;
注意:读取数据时按照文件中数据的格式读取。

法一:

nt b[10];

fstream f2;//定义一个名为f2的数据流指针

f2.open("D:\a.txt"); //以读和写方式打开D盘中的a.txt文件

for (int i = 0; i < 10; i++) {

f1 >> b[i] ; //读取时会根据文件中的格式读取。

}

f2.close();//关闭文件

//法二:

//char b[]

//f1.open("D:\DAAT.txt"); //以读和写方式打开D盘中的a.txt文件

//if(!f1)cout<<"未找到文件"<<endl;

//f1.seekg(ios::beg); //重置数据流指针

//f1.getline(b,80,EOF);eof()函数是判断文件是否读到了末尾。

//cout<<b<<endl;

### 二进制文件的读和写操作 ###
此处我没有整理,大家可以参考他的这篇文章,写的很详细:https://blog.csdn.net/weixin_43956598/article/details/90694117;
### 文件的其他函数操作 ###
Is_open( ) 判断文件是否处于打开的状态。如果是,返回true;如果不是,返回false eof() 判断读文件是否到达文件末尾。如果是,返回true;如果不是,返回false bad() 如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间时,就会报错。 fail() 除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。 good() 这是最通用的:如果调用以上任何一个函数返回true 的话,函数返回 false 。 clear() 重置以上成员函数所检查的状态标志。

c++ 文件的简单操作的更多相关文章

  1. java代码用dom4j解析xml文件的简单操作

    时间: 2016/02/17 目标:为telenor的ALU Femto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中. 从网上搜了下,有四种常用的解析xml的 ...

  2. 从码云把之前的代码git push 回IDEA 对IDEA里的文件进行简单操作

    前情提要:我的IDEA里的项目之前已经和码云连接成功可以上传.但我直接在电脑文件夹里对文件进行重命名.剪切.粘贴等操作之后IDEA对操作后的文件不识别,无奈之下我将码云上之前的代码推回重新新建了项目. ...

  3. 用Python对excel文件的简单操作

    #-*-coding:utf8-*- import xlrd #代开excel文件读取数据 data = xlrd.open_workbook("C:\\Users\\hyl\\Deskto ...

  4. Properties 文件的简单操作

    properties 文件里面主要 存 一个Key对应一个Value  一般用来存放账户密码资料 方法有:Properties p=new  Properties(); p.setproperty(& ...

  5. pandas批量读取带有日期的文件夹简单操作

    工作中碰到了这样一个数据处理的问题,想让你把某个文件夹下的子文件夹中的excel表级联成为1张表,用excel来做会很浪费时间并且很劳累,这时候我们就可以用pandas来加大工作效率,只需要半个小时就 ...

  6. python中文件的基础操作

    打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...

  7. Csharp 简单操作Word模板文件

    原文:Csharp 简单操作Word模板文件 1.创建一个模板的Word文档  Doc1.dot 内容为: To: <Name> Sub:<Subject> Website i ...

  8. 用C++进行简单的文件I/O操作-转自VC知识库

    原文请见 http://www.vckbase.com/index.php/wv/1158 序论 我曾发表过文件输入输出的文章,现在觉得有必要再写一点.文件 I/O 在C++中比烤蛋糕简单多了. 在这 ...

  9. HDFS基本命令行操作及上传文件的简单API

    一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据 ...

随机推荐

  1. dotnet 使用 Environment.FailFast 结束程序

    在运行到一些诡异的代码,这时的程序已经无法继续运行,需要退出,那么如何在记完日志之后在退出程序记录更多信息?可以通过 Environment.FailFast 里面添加字符串告诉用户当前的进程无法继续 ...

  2. N9K 40G接口一分4*10G配置

    Breakout InterfacesCisco NX-OS supports the breakout of high bandwidth 40G interfaces at the module ...

  3. There is already an open DataReader associated with this Connection which must be closed first EF

    废话不多说,直接 上图,及解决办法.不过问题还不是太清楚到底为什么会出现这个情况..........  

  4. nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)

    恩..nixyx确实算不上是一个构建系统. 所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分. 类似的软件还有:google的gyp.腾讯的 ...

  5. centos7 断电导致 generating /run/initramfs/rdsosreport.txt 问题

    开机就进入命令窗口,窗口提示信息如下: generating “/run/initramfs/rdsosreport.txt” entering emergencymode. exit the she ...

  6. HBase 原理

    遗留问题: 数据在更新时首先写入Log(WAL log)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的 ...

  7. 聊聊最近撸Spring源码感悟

    一.前言     最近一段时间撸了Spring IOC.AOP.Transactional源码,这篇文章聊聊我写了哪些小玩意,这可能就是阅读源码以后最大收获.希望大家在里面能学习一些什么东西吧: 二. ...

  8. $POJ1742\ Coins$ 多重背包+贪心

    Vjudge传送门 $Sol$ 首先发现这是一个多重背包,所以可以用多重背包的一般解法(直接拆分法,二进制拆分法...) 但事实是会TLE,只能另寻出路 本题仅关注“可行性”(面值能否拼成)而不是“最 ...

  9. 信息熵为什么要定义成-Σp*log(p)?

    信息熵为什么要定义成-Σp*log(p)? 再解释信息熵之前,需要先来说说什么是信息量. 信息量是对信息的度量,单位一般用bit. 信息论之父克劳德·艾尔伍德·香农(Claude Elwood Sha ...

  10. NetCore 启动地址配置详解

    背景 程序在发布部署时候,设置环境ASPNETCORE_URLS不生效,也没在代码里使用UseUrls("xxxx"),启动一直是http://localhost:5000.最后测 ...