C++高级编程(一)文件和流

26 篇文章 0 订阅

C++高级编程内容:文件和流、异常处理、动态内存、命名空间、模板、预处理器、信号处理、多线程、Web编程等。

C++标准库:点击打开链接

std::    是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。

         对象cout是标准函数库所提供的对象,而标准库在名字空间中被指定为std,所以在使用cout的时候要加上std::。这样编译器就会明白我们调用的cout是名字空间std中的cout。   


一、文件和流

1、i/o  stream输入输出流

iostream库是一个面向对象的库,提供了输入和输出功能,使用流。
流是一个抽象的概念,表示在输入和输出设备进行操作。流基本上可以表示为不定长度字符的源或目的地。
流通常与字符的物理源或目的地相关,如磁盘文件、键盘或控制台,因此从我们的抽象中获得或写入的字符称为流,物理上是对物理设备的输入/输出。



上面<ios>/<istream>/<iostream>/<fstream>/<sstream>均表示库

里面是基类和派生类及对象。

关系:ios_base->ios->istream/ostream->iostream

ios_baseBase class for streams(基类流)

标准输入/输出库中流类的整个层次结构的基类,它描述流的最基本部分,它与所有流对象都是通用的,独立于它们的字符类型。

它没有公共构造函数,因此不能声明这个类的对象。

ios_base及其派生类basic_ios定义流不取决于流是一个输入或输出流的成分

ios_base描述独立于模板参数的成员(即字符类型和特点),而basic_ios描述,取决于他们的成员。

cin、cout标准输入流、输出流对象可视的即从键盘中输入和窗口显示均可看见。

2、文件流

继承关系



#include <fstream>  
ofstream         //该数据类型表示输出文件流,用于创建文件并向文件写入信息。 
ifstream         //该数据类型表示输入文件流,用于从文件读取信息。 
fstream          //该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream>。


2、打开文件

open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。

在从文件读取信息或者向文件写入信息之前,必须先打开文件。

ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。

void open(const char *filename, ios::openmode mode);
open()  成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。

成员函数

构造文件流 
(公开成员函数)[编辑]
(析构函数)
[虚] (隐式声明)
析构 basic_fstream 和关联的缓冲区,并关闭文件 
(虚公开成员函数)[编辑]
(C++11)
移动文件流 
(公开成员函数)[编辑]
(C++11)
交换二个文件流 
(公开成员函数)[编辑]
返回底层未处理的文件设备对象 
(公开成员函数)[编辑]
文件操作
检查流是否有关联文件 
(公开成员函数)[编辑]
打开文件,并将它与流关联 
(公开成员函数)[编辑]
关闭关联文件 
(公开成员函数)[编辑]

非成员函数

特化 std::swap 算法 
(函数模板)[编辑]

继承自 std::basic_istream

成员函数

有格式输入
释出有格式数据 
(std::basic_istream 的公开成员函数)[编辑]
无格式输入
get
释出字符 
(std::basic_istream 的公开成员函数)[编辑]
读取下个字符而不释出 
(std::basic_istream 的公开成员函数)[编辑]
反释出字符 
(std::basic_istream 的公开成员函数)[编辑]
放字符到输入流中 
(std::basic_istream 的公开成员函数)[编辑]
释出字符,直至找到给定字符 
(std::basic_istream 的公开成员函数)[编辑]
释出并舍弃字符,直至发现给定字符 
(std::basic_istream 的公开成员函数)[编辑]
释出字符块 
(std::basic_istream 的公开成员函数)[编辑]
释出已经可用的字符块 
(std::basic_istream 的公开成员函数)[编辑]
返回上次无格式输出操作所释出的字符数 
(std::basic_istream 的公开成员函数)[编辑]
寻位
返回输入位置指示器 
(std::basic_istream 的公开成员函数)[编辑]
设置输入位置指示器 
(std::basic_istream 的公开成员函数)[编辑]
杂项
与底层存储设备同步 
(std::basic_istream 的公开成员函数)[编辑]

成员类

实现为输出操作准备流的基本逻辑 
(std::basic_istream 的公开成员类)[编辑]

继承自 std::basic_ostream

成员函数

有格式输入
插入有格式数据 
(std::basic_ostream 的公开成员函数)[编辑]
无格式输入
put
插入字符 
(std::basic_ostream 的公开成员函数)[编辑]
插入字符块 
(std::basic_ostream 的公开成员函数)[编辑]
寻位
返回输出位置指示器 
(std::basic_ostream 的公开成员函数)[编辑]
设置输出位置指示器 
(std::basic_ostream 的公开成员函数)[编辑]
杂项
与底层存储设备同步 
(std::basic_ostream 的公开成员函数)[编辑]

成员类

为输出操作实现流准备的基本逻辑 
(std::basic_ostream 的公开成员类)[编辑]

继承自 std::basic_ios

成员类型

 
成员类型 定义
char_type CharT
traits_type Traits
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

成员函数

状态函数
检查是否没有发生错误,例如是否可执行I/O操作 
(std::basic_ios 的公开成员函数)[编辑]
eof
检查是否到达了文件末尾 
(std::basic_ios 的公开成员函数)[编辑]
检查是否发生了可恢复的错误 
(std::basic_ios 的公开成员函数)[编辑]
bad
检查是否已发生不可恢复的错误 
(std::basic_ios 的公开成员函数)[编辑]
检查是否有错误发生(fail() 的同义词) 
(std::basic_ios 的公开成员函数)[编辑]
(C++11 前)
(C++11 起)
检查是否没有发生错误(!fail()的同义词) 
(std::basic_ios 的公开成员函数)[编辑]
返回状态标志 
(std::basic_ios 的公开成员函数)[编辑]
设置状态标志 
(std::basic_ios 的公开成员函数)[编辑]
修改状态标志 
(std::basic_ios 的公开成员函数)[编辑]
格式化
复制格式化信息 
(std::basic_ios 的公开成员函数)[编辑]
管理填充字符 
(std::basic_ios 的公开成员函数)[编辑]
杂项
管理异常掩码 
(std::basic_ios 的公开成员函数)[编辑]
设置本地环境 
(std::basic_ios 的公开成员函数)[编辑]
管理相关的流缓冲区 
(std::basic_ios 的公开成员函数)[编辑]
tie
管理绑定的流 
(std::basic_ios 的公开成员函数)[编辑]
窄化字符 
(std::basic_ios 的公开成员函数)[编辑]
拓宽字符 
(std::basic_ios 的公开成员函数)[编辑]

继承自 std::ios_base

成员函数

格式化
管理格式标志 
(std::ios_base 的公开成员函数)[编辑]
设置特定格式标志 
(std::ios_base 的公开成员函数)[编辑]
清除特定格式的标志 
(std::ios_base 的公开成员函数)[编辑]
管理浮点操作的精度 
(std::ios_base 的公开成员函数)[编辑]
管理域的宽度 
(std::ios_base 的公开成员函数)[编辑]
本地环境
设置本地环境 
(std::ios_base 的公开成员函数)[编辑]
返回当前本地环境 
(std::ios_base 的公开成员函数)[编辑]
内部可扩展数组
[静态]
返回能安全用作 pword() 和 iword() 下标的程序范围内独有的整数 
(std::ios_base 的公开静态成员函数)[编辑]
如果有必要的话,调整私有存储的大小,并且访问位于提供的下标的long元素 
(std::ios_base 的公开成员函数)[编辑]
若需要则重置私有存储的大小,并访问位于指定下标的 void* 元素 
(std::ios_base 的公开成员函数)[编辑]
杂项
注册事件回调函数 
(std::ios_base 的公开成员函数)[编辑]
[静态]
设置C++和C的IO库是否可以互操作 
(std::ios_base 的公开静态成员函数)[编辑]
成员类
流异常 
(std::ios_base 的公开成员类)[编辑]
初始化标准流对象 
(std::ios_base 的公开成员类)[编辑]

成员类型和常量

 
类型 解释
流打开模式类型

亦定义下列常量:

常量 解释[编辑]
app 每次写入前寻位到流结尾[编辑]
binary二进制模式打开[编辑]
in 为读打开[编辑]
out 为写打开[编辑]
trunc 在打开时舍弃流的内容[编辑]
ate 打开后立即寻位到流结尾[编辑]

(typedef)[编辑]
格式化标志类型

亦定义下列常量:

常量 解释[编辑]
dec 为整数 I/O 使用十进制底:见 std::dec[编辑]
oct 为整数 I/O 使用八进制底:见 std::oct[编辑]
hex 为整数 I/O 使用十六进制底:见 std::hex[编辑]
basefield dec|oct|hex|0 。适用于掩码运算[编辑]
left 左校正(添加填充字符到右):见 std::left[编辑]
right 右校正(添加填充字符到左):见 std::right[编辑]
internal 内部校正(添加填充字符到内部选定点):见 std::internal[编辑]
adjustfield left|right|internal 。适用于掩码运算[编辑]
scientific 用科学记数法生成浮点类型,或若与 fixed 组合则用十六进制记法:见 std::scientific[编辑]
fixed 用定点记法生成浮点类型,或若与 scientific 组合则用十六进制记法:见 std::fixed[编辑]
floatfield scientific|fixed|(scientific|fixed)|0 。适用于掩码运算[编辑]
boolalpha 以字母数字格式插入并释出 bool 类型:见 std::boolalpha[编辑]
showbase 生成为整数输出指示数字基底的前缀,货币 I/O 中要求现金指示器:见 std::showbase[编辑]
showpoint 无条件为浮点数输出生成小数点字符:见 std::showpoint[编辑]
showpos 为非负数值输出生成 + 字符,见 std::showpos[编辑]
skipws 在具体输入操作前跳过前导空白符:见 std::skipws[编辑]
unitbuf 在每次输出操作后冲入输出:见 std::unitbuf[编辑]
uppercase 在具体输出的输出操作中以大写等价替换小写字符:见 std::uppercase[编辑]

(typedef)[编辑]
流状态类型

亦定义下列常量:

常量 解释[编辑]
goodbit 无错误[编辑]
badbit 不可恢复的流错误[编辑]
failbit 输入/输出操作失败(格式化或提取错误)[编辑]
eofbit 关联的输出序列已抵达文件尾[编辑]

(typedef)[编辑]
寻位方向类型

亦定义下列常量:

常量 解释[编辑]
beg 流的开始[编辑]
end 流的结尾[编辑]
cur 流位置指示器的当前位置[编辑]

(typedef)[编辑]
指定事件类型 
(枚举)[编辑]
回调函数类型 
(typedef)


关闭函数:

close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。


写入文件:

在 C++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里使用的是 ofstream 或 fstream 对象,而不是 cout 对象。


读取文件:

在 C++ 编程中,我们使用流提取运算符( >> )向文件写入信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里使用的是 ofstream 或 fstream 对象,而不是 cin 对象。


示例:

#include<iostream>
#include<fstream>
#include<string>

using namespace std;


int main()
{
	char data[100];//缓存文件中的内容
	string filename = "tt.txt";
	ofstream out;
	out.open(filename, ios::app | ios::ate);
	
	cin.getline(data, 100);//getline()函数从外部读取一行.

	out << data << endl;//从键盘上输入内容到文件中
	out.close();

	//读取文件内容并显示
	ifstream infile;
	infile.open(filename);
	while (!infile.eof())//如果读文件到达文件末尾,返回true。
	{
		infile >>data ;
		cout << data << endl;
	}

	system("pause");
	return 0;
}

参考:


http://www.runoob.com/cplusplus/cpp-files-streams.html

http://www.cplusplus.com/reference/fstream/fstream/open/

http://zh.cppreference.com/w/cpp/io/basic_fstrea



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HySmiley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值