C++文件流fstream详细说明
C++文件流。
首先需要包含头文件#include< fstream >
fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等,
fstream:文件输入输出类。表示文件级输入输出流(字节流);
ifstream:文件输入类。表示从文件内容输入,也就是读文件;
ofstream:文件输出类。表示文件输出流,即文件写。
所以一般直接创建一个父类对象即可(即fstream类的对象)
C++中seep()和seekg()函数功能
seekg:设置输入文件流的文件流指针位置
seekp:设置输出文件流的文件流指针位置
C++文件流检测EOF
成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是inteof();
例:if(in.eof())ShowMessage("已经到达文件尾!");
C++文件流文件定位
和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:
1. istream &seekg(streamoff offset,seek_dir origin);
2. ostream &seekp(streamoff offset,seek_dir origin);
函数原型:
ostream& seekp( streampos pos );
ostream& seekp( streamoff off, ios::seek_dir dir );
istream& seekg( streampos pos );
istream& seekg( streamoff off, ios::seek_dir dir );
函数参数
pos:新的文件流指针位置值
off:需要偏移的值
dir:搜索的起始位置
dir参数用于对文件流指针的定位操作上,代表搜索的起始位置
seekg(绝对位置); //绝对移动, //输入流操作
seekg(相对位置,参照位置); //相对操作
tellg(); //返回当前指针位置
seekp(绝对位置); //绝对移动, //输出流操作
seekp(相对位置,参照位置); //相对操作
tellp(); //返回当前指针位置
在ios中定义的枚举类型:
enum seek_dir {beg, cur, end};
每个枚举常量的含义:
ios::beg:文件流的起始位置
ios::cur:文件流的当前位置
ios::end:文件流的结束位置
这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。
例:
1. file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节
2. file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节
下边的代码讲解了
1:4种文件的读写操作
2:如何使用get(),put(),getline(),write()以及read()函数。
3:如何得到文件的大小。
4:seekg()和teelg()配套使用的真谛,seekp()和teelp()同理
//文件流;
#include<iostream>
#include<fstream> //ifstream ofstream
using namespace std;
/*
No1.文件流流类
ofstream:打开文件,写文件
ifstream:打开文件,读操作
fstream:可读可写
No2.一般用包含#include<fstream>
No3.打开文件,关闭文件
打开文件:
void open(const char* URL,ios::openmode mode);
mode:
ios:in 读的方式打开文件
ios:out 写的方式打开文件
ios::app 追加的方式写文件
ios::ate 在已有的文件,文件指针在文件末尾
ios::trunc 文件不存在,创建文件
ios::binary 二进制形式打开文件,默认方式ASCII码方式打开
ios::nocreate 不创建的方式
ios::norepalce 不替换
组合方式:用的是位或
ios::in|ios::out 可读写
ios::out|ios::binary 二进制写的方式打开文件,
判断文件是否打开成功:
1.is_open() 判断打开是否成功
2.!文件对象 判断文件是否打开成佛那个
关闭文件:close()成员函数关闭;
*/
void testOpenFile() { //用于测试用的函数
//C++中打开文件是文件对象,不是文件指针。
fstream File,File1;
File.open("2.txt", ios::in | ios::out );
File1.open("3.txt", ios::in | ios::out | ios::trunc);
//使用open函数和直接用构造函数是一样的效果。
if (!File.is_open()) {
cerr << "2.txt 打开文件失败!!\n";
}
if (!File) {
cerr << "2.txt打开文件失败!!!\n";
}//这个if语句和上一个if语句作用相同
if (!File1.is_open()) {
cerr << "3.txt打开文件失败!!\n";
}
else {
cout << "3.txt 打开成功!!!\n";
}
File.close();
File1.close();
}
//No2.读写方式:
void asciiReadWriteFile(const char* readFileName, const char* writeFileName) {
fstream read(readFileName, ios::in);
fstream write(writeFileName, ios::out);
//第一种读写方式:ASCII 直接流的方式读写, >> <<
/*while (1) {
char temp;
read >> temp;
if (read.eof()) {
break;
}
write << temp;
}*/
//第二种方式读写方式:可以保留空格和换行,用get()和put();
/*while (1) {
char temp;
read.get(temp);
//temp=read.get();一样的效果!
if (read.eof()) {
break;
}
write.put(temp);
}*/
//第三种读写方式:不能保留空格和换行,用getline()和write().
char str[40];
while (!read.eof()) {
memset(str, ' ', 40);
read.getline(str,40);
int len = strlen(str);
write.write(str,len);
write.put('\n');
}
}
//使用二进制读写方式 使用read()和write()函数来实现
void binaryReadWriteFile(const char* readFile, const char* writeFile) {
fstream read(readFile, ios::in | ios::binary);
fstream write(writeFile, ios::out | ios::binary);
while (!read.eof()) {
char str[1024]="";
read.read(str, 1024);
write.write(str, 1024);
}
read.close();
write.close();
}
//
void testSeekReadFile(const char* fileName) {
fstream fread(fileName, ios::in);
fstream fwrite(fileName, ios::app|ios::out);
if (!fread) {
cerr << "打开文件\"fileName\"!失败!";
}
int f = fread.tellg();
fread.seekg(0,ios::end);
int l = fread.tellg();
cout << "size of " << fileName << "is "<<(l - f) << "bytes.";
fread.seekg(5);//表示将指针位置设置到绝对位置5;
cout << (char)fread.get() << endl;
fread.seekg(-1, ios::cur); //seekg的第一个参数为负,表示从当前位置往前移
cout << (char)fread.get() << endl;
fread.seekg(1, ios::cur);//第一个参数为正,表示从当前位置往后数的第一个位置。
fwrite.put('w');//在末尾追加写。
}
int main() {
testOpenFile();
asciiReadWriteFile("read.txt","write.txt");
binaryReadWriteFile("read.txt", "binaryTest.txt");
testSeekReadFile("read.txt");
return 0;
}
C++文件流fstream详细说明相关推荐
- C++文件流fstream相关操作
C++文件流fstream相关操作 一.理解Open函数 利用fstream,使用open/close打开或创建,完成后关闭,对文件读入读出使用插入器(<<) 或析取器(>>) ...
- C++ 流的操作 | 初识IO类、文件流、string流的使用
文章目录 前言 IO头文件 iostream fstream sstream 流的使用 不能拷贝或对 IO对象 赋值 条件状态与 iostate 类型 输出缓冲区 文件流 fstream类型 文件模式 ...
- C++学习22:C++文件流
总结放前面:最后总结一下:用这个东西,不如用C标准库和linux系统调用,如果不是为了让C++知识饱满一点,真不想研究这东西. 文件流是以磁盘中的文件作为输入.输出对象的数据流.输出文件流将数据从内存 ...
- C++ Primer 5th笔记(8)chapter8 类:IO库-文件流
1.创建一个文件流 ifstream in(ifile);//打开文件 ofstream out;//不打开文件 2. 文件输入输出类继承自iostream类,可以使用iostream类的操作 fst ...
- C++ IO类(3) 文件流
我们可以通过文件流来控制文件的输入以及输出: fstream: 创建一个未绑定的文件流 fstream fstrm("file.txt") 创建一个fstream,并打开名为s的 ...
- c++语言文件流,C++ IO类、文件输入输出、string流详细讲解
新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...
- C++文件流:myfstream,fstream,文件读写,随机文件读写【C++文件流】(59)
文件流 myfstream fstream Test myfstream fstream 流对象的定义 流对象关联文件 open 函数 打开方式 关闭流对象 文件读写 读写文本文件 读写接口 读一字/ ...
- c++文件流基本用法(fstream, ifstream, ostream)
原文链接 前言: c++的文件流处理其实很简单,前提是你能够理解它.文件流本质是利用了一个buffer中间层.有点类似标准输出和标准输入一样. c++ IO的设计保证IO效率,同时又兼顾封装性和易用性 ...
- 一文彻底搞懂C++文件流, 文件读写,fstream、seekg、seekp等的使用。
彻底搞懂C++文件流. 首先需要头文件#include< fstream > fstream可以把它理解成一个父类,包含的子类有ifstream和ofstream等, 所以一般直接创建一个 ...
最新文章
- matlab二阶导数表示,【单选题】在MATLAB符号计算中,y的二阶导数表示为( )。...
- web网页获取,cookie 的管理,post和get方式的模拟。
- 【FTP】java FTPClient 文件上传内容为空,文件大小为0
- 【Tools】MarkDown教程(二)-MarkDown基本语法
- 如何编写 Nagios 插件 (http://zener.blog.51cto.com/937811/727685)
- ElasticSearch教程——自定义分词器(转学习使用)
- pythonxlwt行居中_python3-xlwt-Excel设置(字体大小、颜色、对齐方式、换行、合并单元格、边框、背景、下划线、斜体、加粗)...
- python实例 81,82
- oracle序列修改语句
- 【同113】LeetCode 129. Sum Root to Leaf Numbers
- HTTP代理原理探索
- lnmp一键安装的步骤
- 随身系统veket linux v3.11简体中文免费版,《veket随身系统》下载(veket linux)1.9
- linux查看ftp默认端口,linux系统如何修改ftp默认端口(图文)
- Cloudera Manager server服务器系统损坏后恢复
- IOS-启动图和开屏广告图,类似网易
- 简述验证Anaconda是否安装成功的两种方式和Anaconda环境变量配置过程
- Java程序性能优化-概述
- Fast R-CNN 论文详读
- 王者荣耀服务器维护公告5月8号,王者荣耀5月8日更新维护公告 5.8更新了什么