1.文件的打开方式
1.文本打开
在windows中,写入时会将\n换成\r\n,读出时\r\n会读出\n
linux对\n读写不做处理
2.二进制打开
对\n读写不做处理
2.文本读写
1.数据要先变成字符串再写进缓冲区
2.字符串直接写进缓冲区就是
3.c++对文本读写的支持
istream/ostream中重载了对内置类型的<<和>>,可以把内置类型变成字符串再写入缓冲区
对于自定义类型,需要用友元自己重载<<和>>
3.二进制读写
1.直接对字节进行读写
2.c++对二进制读写的支持
istream/ostream的write可以从特定位置读n个字节并写入,read可以从缓冲区读n个字节写入所给的缓冲区
4.文件打开方式和文件读写方式不一样
看了上面我们就能发现,文件的打开方式和真实文件读写方式其实还真可以不一样,打开方式只会影响\n并且还只有windows文本打开时有这个破规矩,而真实读写方式实际上是由读写时调用的接口决定的,调的是<<和>>这种会进行把数据变成字符串的接口那不就是文本读写,调的是write和read这种对字节直接进行读写的接口,那不就是二进制读写吗?
当然你像如果是读写字符串那不管是<<还是write实际上都一样
尽管可以打开方式和读写方式不一样,但我们推荐对应着用
C++语言中的文本读写和二进制读写接口
C++通过标准库<fstream>
提供了更面向对象的文件读写方式,比C语言的接口更加类型安全且易于使用。以下是主要的接口:
文本读写接口
-
文件流类
-
std::ifstream
- 输入文件流(用于读取) -
std::ofstream
- 输出文件流(用于写入) -
std::fstream
- 输入输出文件流
-
-
常用文本读写方法
-
operator<<
- 格式化输出(写入) -
operator>>
- 格式化输入(读取) -
getline(istream&, string&)
- 读取一行到string -
get()
- 读取单个字符 -
put()
- 写入单个字符
-
-
状态检查
-
good()
- 流状态正常 -
eof()
- 到达文件末尾 -
fail()
- 操作失败 -
bad()
- 严重错误
-
二进制读写接口
-
二进制模式打开
-
使用
std::ios::binary
标志打开文件
-
-
二进制读写方法
-
read(char* s, streamsize n)
- 读取二进制数据 -
write(const char* s, streamsize n)
- 写入二进制数据
-
-
文件定位
-
seekg()
/seekp()
- 设置读/写位置 -
tellg()
/tellp()
- 获取读/写位置
-
通用文件操作
-
文件打开/关闭
-
open()
- 打开文件 -
close()
- 关闭文件 -
构造函数中直接指定文件名打开
-
-
模式标志
-
in
- 读模式 -
out
- 写模式 -
app
- 追加模式 -
trunc
- 截断模式 -
binary
- 二进制模式 -
text- 文本模式(默认模式)
-