C++(四十七) — 文件输入、输出流
1、文件输入、输出流
由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,不能像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。
- ifstream类,它是从istream类派生的,用来支持从磁盘文件的输入。
- ofstream类,它是从ostream类派生的,用来支持向磁盘文件的输出。
- fstream类,它是从iostream类派生的,用来支持对磁盘文件的输入输出。
文件原理
文件打开都有一个文件指针,该指针的初始位置由I/O方式指定,每次读写都从文件指针的当前位置开始。每读入一个字节,指针就后移一个字节。当文件指针移到最后,就会遇到文件结束EOF(文件结束符也占一个字节,其值为-1),此时流对象的成员函数eof的值为非0值(一般设为1),表示文件结束 了。
文件关闭,实际上是解除该磁盘文件与文件流的关联,原来设置的工作方式也失效,这样,就不能再通过文件流对该文件进行输入或输出
文件类型:1、ASCII文件:文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件)。
2、打开文件的方式:
方式1:对文件输出流、文件流对象,通过ofstream类的构造函数打开文件
格式: ofstream (磁盘文件名, 输入输出方式);
如果ofstream 为0(假),表示打开操作失败
如: ofstream fout1(fname,ios::out);
输入输出方式可以使用能够进行组合使用的,以“或”运算(“|”)的方式,如:fstream fout(fname,ios::out|ios::in)
方式2:对文件的输出和输入流对象、文件流对象,都可通过open函数打开文件
格式: 文件流对象.open(磁盘文件名, 输入输出方式);
返回值:为0(假),打开操作失败
如: fout.open(fname,ios::out)
关闭文件:
在对已打开的磁盘文件的读写操作完成后,必须要关闭该文件 如: outfile.close( );
方式1:
#include<iostream>
using namespace std;
#include <fstream> void main()
{
char* fname = "D:/VS_programs/day_04/a.txt";
// ofstream fout(fname,ios::out);//不写后面的默认值
ofstream fout(fname);//建立一个 输出流对象 和文件关联
fout << "hello....111" << endl;
fout << "hello....222" << endl;
fout.close(); //读文件
//ifstream fin(fname, ios::in);//不写后面的默认值
ifstream fin(fname);//建立一个 输入流对象 和文件关联
char ch;
while (fin.get(ch))
{
cout << ch;
}
fin.close();
system("pause");
}
方式2:
ofstream out; //输出流指针out
ifstream in; //输入流指针in
out.open("file.txt"); //以输出的方式打开文件 file.txt wrtie_file(out); //write_file是用户自己写的一个函数,用于操作 out指针指向的文件
out.close(); //操作完之后一定要关闭流指针。否则不能用 其他流指针打开该文件,如 输入流指针
//不调用 close()函数,就无法使其他流指针或者说其他进程访问这个文件 in.open("file.txt"); //以输入的方式打开文件 file.txt
read_file(in); //read_file是用户自己写的一个函数,用于操作 in指针指向的文件
in.close(); //关闭输入流指针 /*-----------再说一种方式-------------*/
如:
ofstream out("file.txt"); 也是表示打开file.txt,返回 out流指针,只不过他是隐式调用 open函数,因为ofstream类的构造函数中就有调用了open函数
同理:
ifstream in("file.txt"); 也是等价于 ifstream in; in.open("file.txt");
3、判断是否打开成功和是否已经到文件结尾
()是否打开成功 ofstream out("file.txt");
if(!out.is_open)
{
cout<<“打开失败”<<endl;
} //同理 ifstream in也是这样判断。 ()是否到文件结尾
ifstream in("file.txt");
while(!in.eof)
{
fun(); //当文件没到达末尾,就执行fun()函数
}
4、获取一个文本文件大小
#include<iostream>
#include<fstream>
using namespace std; void get_size(ifstream &in)
{
long b,e;
b=in.tellg();
in.seekg(,ios::end);
e=tellg();
long size=e-b;
cout<<"size="<<size<<endl;
} int main()
{
ifstream in("file.txt");
get_size(in);
in.close();
return ;
}
5、获得和设置流指针
ifstream 有一个 get 指针,指向下一个将要被读取的元素
ofstream 有一个 put指针,指向下一个将要被写入的位置
tellg()和tellp()分别用于返回get指针,put指针的位置,并不需要输入参数
seekg()和seekp() 分别用于设置 get指针和 put指针的位置,一个两个参数,第一个为,位移量,第二个为 位置。
seekg(0,ios::beg); //设置get指针的位置为,从文件开头开始位置0个位置 的地方
参考博客:https://blog.csdn.net/u014453898/article/details/54565974
C++(四十七) — 文件输入、输出流的更多相关文章
- Java精选笔记_IO流(字符输入输出流、字符文件输入输出流、字符流的缓冲区)
字符流 Reader是字符输入流的基类,用于从某个源设备读取字符 Writer是字符输出流,用于向某个目标设备写入字符 字符流操作文件 字符输入流FileReader,通过此流可以从关联的文件中读取一 ...
- java Io文件输入输出流 复制文件
package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...
- c++文件输入输出流fstream,对输入>>和输出<<重载
1. fstream 继承自iostream --> 要包含头文件#include<fstream> 2. 建立文件流对象 3. 打开文件夹 4. 测试是否打开成功 5. 进行读写操 ...
- 文件输入输出流工具: IOUtils使用总结
序言 以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTil ...
- C/C++文件输入输出流
C++方式 C方式 头文件 fstream stdio.h open file.open(const char *filename,const char *mode) FILE* fo ...
- C#文件输入输出流
从输入流中读取数据(行读取字符串) using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- java——IObufferedReader文件输入输出流
package com.jredu.ch02_lianxi; import java.io.BufferedReader;import java.io.BufferedWriter;import ja ...
- C++ STL——输入输出流
[TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 缓冲区 (1)标准输入:从键盘输入数据到程序(input) (2)标准输出:程序数据输出 ...
- java 输入输出流1 FileInputStrem&&FileOutStream
通过文件输入流读取问价 package unit6; import java.io.FileInputStream; import java.io.FileNotFoundException; imp ...
- JAVA基础-输入输出流
一,File类:文件的创建和删除 1.File(String pathname):pathname是指路径名称.用法 File file = new File("d:/1.txt " ...
随机推荐
- tomcat 启动和关闭脚本
start.sh #!/bin/sh . ~/.bash_profile echo "" > ${TOMCAT_HOME}/logs/catalina.out; sh ${T ...
- oracle 导出,导入表
导出 exp DZQZ/DZQZ@orcl file=D:/DZQZ.dmp log=D:/DZQZ.log 导入 imp DZQZ/DZQZ@orcl file=D:\电子取证\DZQZ.dmp f ...
- EasyNVR摄像机网页无插件直播方案H5前端构建之:接口调用获取实时信息
背景分析 熟悉EasyNVR产品的小伙伴应该知道,EasyNVR主要针对的是安防类的项目,通过RTSP/onvif协议将前端高清网络摄像机IPC.NVR等接入进来,然后将设备端的音视频通过采集.转换, ...
- Windows SVN迁移到Linux 服务器
一.备份VisualSVN项目 1. 现在要使用Linux作为svn服务器,之前是在windows Server 2008上的,用的是VisualSVN, 如下图所示. 2. 现在svn中有一个项目f ...
- Mysql操作命令(基础)
创建数据库 CREATE DATABASE name; 显示所有数据库 SHOW DATABASES; 删除数据库 DROP DATABASE name; 选择数据库 USE DATABASENAME ...
- vba实现工具的序列号验证框架
对于密码破译方面笔者不太懂,之前对于各种序列号的激活也有些臆测,自己根据想法做了个序列号验证的小框架,以后做的工具也可以用之保护一下下... 主要思路是:用户打开小工具后,系统检测是否已激活,如果未激 ...
- php 按照字典序排序 微信卡券签名算法用到
代码 <?php $data=array("api_ticket"=>"IpK_1T69hDhZkLQTlwsAXzJqxGE_7RuU_tjnx8rWC9f ...
- es内存不够
8核32G 3台 ELS机器,当时只给es配置了8G内存,es的总体数据量大小将近30G(查看GET /_cat/shards?v)
- kafka-manager 创建 topic【转】
1,add cluster 添加cluster 添加cluster 选择一下kafka的版本 2,创建topic 添加topic 3,查看topic 查看topic
- Source Insight 4.0相对路径的设置
比如在D盘有个51的Firmware工程 里面有几个文件夹存放程序文件,项目文件在Project文件夹里,也就是整个Firmware里的文件都是有用的. Keil项目文件位置. 到这里就可以双击Tem ...