C++ 文本读写与二进制读写的底层机制

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++通过标准库提供了更面向对象的文件读写方式,比C语言的接口更加类型安全且易于使用。以下是主要的接口:

文本读写接口

  1. 文件流类

    • std::ifstream - 输入文件流(用于读取)

    • std::ofstream - 输出文件流(用于写入)

    • std::fstream - 输入输出文件流

  2. 常用文本读写方法

    • operator<< - 格式化输出(写入)

    • operator>> - 格式化输入(读取)

    • getline(istream&, string&) - 读取一行到string

    • get() - 读取单个字符

    • put() - 写入单个字符

  3. 状态检查

    • good() - 流状态正常

    • eof() - 到达文件末尾

    • fail() - 操作失败

    • bad() - 严重错误

二进制读写接口

  1. 二进制模式打开

    • 使用std::ios::binary标志打开文件

  2. 二进制读写方法

    • read(char* s, streamsize n) - 读取二进制数据

    • write(const char* s, streamsize n) - 写入二进制数据

  3. 文件定位

    • seekg()/seekp() - 设置读/写位置

    • tellg()/tellp() - 获取读/写位置

通用文件操作

  1. 文件打开/关闭

    • open() - 打开文件

    • close() - 关闭文件

    • 构造函数中直接指定文件名打开

  2. 模式标志

    • in - 读模式

    • out - 写模式

    • app - 追加模式

    • trunc - 截断模式

    • binary - 二进制模式

    • text- 文本模式(默认模式)

你可能感兴趣的:(c++,开发语言)