c++ 文件的简单操作
文件的读取操作
在程序设计中,文件常用的操作不外乎——打开、读、写、流指针操作、关闭。我日常中使用的比较多,但从来 没有细细总结今天就总结下具体的用法。
相关概念
计算机上的文件其实是数据的集合,对文件的读写其实是对数据的读写。
文件可以大致分为两种:文本文件和二进制文件。
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++ 文件的简单操作的更多相关文章
- java代码用dom4j解析xml文件的简单操作
时间: 2016/02/17 目标:为telenor的ALU Femto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中. 从网上搜了下,有四种常用的解析xml的 ...
- 从码云把之前的代码git push 回IDEA 对IDEA里的文件进行简单操作
前情提要:我的IDEA里的项目之前已经和码云连接成功可以上传.但我直接在电脑文件夹里对文件进行重命名.剪切.粘贴等操作之后IDEA对操作后的文件不识别,无奈之下我将码云上之前的代码推回重新新建了项目. ...
- 用Python对excel文件的简单操作
#-*-coding:utf8-*- import xlrd #代开excel文件读取数据 data = xlrd.open_workbook("C:\\Users\\hyl\\Deskto ...
- Properties 文件的简单操作
properties 文件里面主要 存 一个Key对应一个Value 一般用来存放账户密码资料 方法有:Properties p=new Properties(); p.setproperty(& ...
- pandas批量读取带有日期的文件夹简单操作
工作中碰到了这样一个数据处理的问题,想让你把某个文件夹下的子文件夹中的excel表级联成为1张表,用excel来做会很浪费时间并且很劳累,这时候我们就可以用pandas来加大工作效率,只需要半个小时就 ...
- python中文件的基础操作
打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...
- Csharp 简单操作Word模板文件
原文:Csharp 简单操作Word模板文件 1.创建一个模板的Word文档 Doc1.dot 内容为: To: <Name> Sub:<Subject> Website i ...
- 用C++进行简单的文件I/O操作-转自VC知识库
原文请见 http://www.vckbase.com/index.php/wv/1158 序论 我曾发表过文件输入输出的文章,现在觉得有必要再写一点.文件 I/O 在C++中比烤蛋糕简单多了. 在这 ...
- HDFS基本命令行操作及上传文件的简单API
一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据 ...
随机推荐
- dotnet 使用 Environment.FailFast 结束程序
在运行到一些诡异的代码,这时的程序已经无法继续运行,需要退出,那么如何在记完日志之后在退出程序记录更多信息?可以通过 Environment.FailFast 里面添加字符串告诉用户当前的进程无法继续 ...
- N9K 40G接口一分4*10G配置
Breakout InterfacesCisco NX-OS supports the breakout of high bandwidth 40G interfaces at the module ...
- There is already an open DataReader associated with this Connection which must be closed first EF
废话不多说,直接 上图,及解决办法.不过问题还不是太清楚到底为什么会出现这个情况..........
- nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
恩..nixyx确实算不上是一个构建系统. 所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分. 类似的软件还有:google的gyp.腾讯的 ...
- centos7 断电导致 generating /run/initramfs/rdsosreport.txt 问题
开机就进入命令窗口,窗口提示信息如下: generating “/run/initramfs/rdsosreport.txt” entering emergencymode. exit the she ...
- HBase 原理
遗留问题: 数据在更新时首先写入Log(WAL log)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的 ...
- 聊聊最近撸Spring源码感悟
一.前言 最近一段时间撸了Spring IOC.AOP.Transactional源码,这篇文章聊聊我写了哪些小玩意,这可能就是阅读源码以后最大收获.希望大家在里面能学习一些什么东西吧: 二. ...
- $POJ1742\ Coins$ 多重背包+贪心
Vjudge传送门 $Sol$ 首先发现这是一个多重背包,所以可以用多重背包的一般解法(直接拆分法,二进制拆分法...) 但事实是会TLE,只能另寻出路 本题仅关注“可行性”(面值能否拼成)而不是“最 ...
- 信息熵为什么要定义成-Σp*log(p)?
信息熵为什么要定义成-Σp*log(p)? 再解释信息熵之前,需要先来说说什么是信息量. 信息量是对信息的度量,单位一般用bit. 信息论之父克劳德·艾尔伍德·香农(Claude Elwood Sha ...
- NetCore 启动地址配置详解
背景 程序在发布部署时候,设置环境ASPNETCORE_URLS不生效,也没在代码里使用UseUrls("xxxx"),启动一直是http://localhost:5000.最后测 ...