文件和输入输出流

C++
2024-12-25 09:29
  • C++的 I/O是以一连串的字节流的方式进行的,在输入操作中,字节从设备(键盘,磁盘驱动器等)流向内存。在输出操作中,字节从内存流向设备(显示屏,打印机等)

  • C++将每个文件看成是字节序列流。

一、关于流的头文件

绝大多数的C++程序都包含了< iostream >头文件,该头文件中声明了所有I/O流操作的所需的基础服务。

< iostream >头文件定义了 cin 标准输入流、cout 标准输出流、cerr 标准错误流 和 clog 有缓冲的标准错误流(流输出内容存入缓冲区,直到缓冲区填满或是被清空才会输出)

< iomanip > 头文件声明了对于带有参数化流运算符(例如 setw 和 setprecision)的格式化I/O有用的服务

<fstream> 头文件声明了用户控制的文件处理服务


二、文件打开模式


三、输出流输出功能

输出功能包括

  • 流插入运算符 <<

  • put成员函数进行字符输出

  • write成员函数进行非格式化的输出

  • 十进制、八进制、十六进制格式的整数输出

  • 不同精确度的浮点数的输出

  • 指定宽度数据的输出

  • 。。。。。。

构造输出流对象打开文件——用于修改


默认输出流文件打开模式是 ios::out

当不需要文件时显示的将其关闭,可以减少资源占用 file.close();

举例:使用I/O流以文本方式建立一个文件test.txt,并写入字符!

ofstream file1("E:\\Codes\\TestInfo\\test.txt");
cout << "the file is writing......" << endl;
file1<<"successful input!";
file1.close();
cout<<"done!"<<endl;

文件输出流成员函数

put 成员函数

cout.put('A'); 显示单个字符。

put也可级联使用

cout.put('A').put('\n');`

cout.put('A'); 效果基本等同于 cout<<'A';

cout.put('AAAA'); //错误,只能输出单个字符

warning: overflow in implicit constant conversion [-Woverflow]

write 成员函数

将内存中的一块内容写到一个文件输出流中

从字符数组中输出字节到文件中去


四、输入流

构造输入流对象打开文件——用于读取


文件输入流的默认打开模式 ios::in

输入流相关函数

get成员函数

功能和 >> 很像,主要的不同点在于 get函数在读入数据时包括空白字符

get函数在遇到文件尾的时候返回 EOF

getline 成员/非成员函数

读取多行字符,每读一行存储一次,可定义行分割符

  • 非成员函数

    函数原型 template<> std::istream &std::getline<...>(std::istream &__is, std::string &__str, char __delim)

    第一个参数传入输入流,第二个参数传入string字符串,第三个参数为自定义行分割符,getline读取到行分割符就结束本次读取,并将自定义的行分割符从流中删除

举例:分行读取文件中的内容

文件中的内容

123

456

789

#include<iostream>
#include<fstream>
using namespace std;
int main(){
    string line1;
    string line2;
    string line3;
    ifstream ifile("E:\\Codes\\Program-c++\\Zhenli_Book_Code\\11-7.txt");
    getline(ifile, line1);
    getline(ifile, line2,'5');   
    getline(ifile, line3);
    cout<<line1<<endl<<line2<<endl<<line3<<endl;
}

读取结果

123

4

6

  • 成员函数

    成员函数只能将读取到内容存储在字符数组中 char[ ]

    函数原型 template<> std::istream &std::istream::getline(char *__s, std::streamsize __n, char __delim)

    第一个参数时字符数组,第二个参数是读取的字节数,第三个参数为自定义行分割符

    读取的字节数已满或者已到自定义的行分割符,则getline都会结束本次读取,并将自定义的行分割符从流中删除

int main(){
   char buf1[10];
   char buf2[10];
   char buf3[10];

   ifstream ifile("E:\\Codes\\Program-c++\\Zhenli_Book_Code\\11-7.txt");
   ifile.getline(buf1,10,'2');
   ifile.getline(buf2, 10);
   ifile.getline(buf3, 10);
   cout<<buf1<<endl<<buf2<<endl<<buf3<<endl;
}

输出结果

1

3

456

read 成员函数

从文件中读取内容输入到字符数组中

由长度参数确定要读的字节数

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: