文件读写

最后更新于 2022-11-17 782 次阅读


头文件

  • ofstream //文件写操作 内存写入存储设备
  • ifstream //文件读操作,存储设备读区到内存中
  • fstream //读写操作,对打开的文件可进行读写操作

打开文件

成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作

如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开

voidopen( const char * filename,ios_base::openmode mode = ios_base::in | ios_base::out );

ios::in为输入(读)而打开文件
ios::out为输出(写)而打开文件
ios::ate初始位置:文件尾
ios::app所有输出附加在文件末尾
ios::trunc如果文件已存在则先删除该文件
ios::binary二进制方式
打开文件模式

判断文件是否打开成功:is_open

  • is_open函数是用来判断调用open后文件是否打开成功的,不需要传递参数;
  • is_open函数的返回值是bool类型,如果文件打开成功则返回true,打开失败则返回flase;

错误判断方法

  • good()   如果文件打开成功
  • bad()    打开文件时发生错误
  • eof()     到达文件尾

读取内容

//前情提要(需要的变量)
istream ifs(s);
string s;
char c;
char tmp[1024];

逐词读取

//第一种:
string tmp;
while (ifs >> tmp)
{
cout << tmp << endl;
}
//这种方法会从ifs中逐个单词读取(也就是遇到空格、换行时会停止)

逐行读取

// 第二种:getline()
while (getline(ifs, s))	//1024是单次读取的最大字符数量
{
    cout << s << endl;
}
// 可以和sstream结合使用

// 或者:
while (ifs.getline(tmp, 1024))	//注意上面的可以对string使用, 而这个是char*
{
    cout << tmp << endl;
}

逐字符读取

//第三种:get()
while( (c = ifs.get()) != EOF)
{
    cout << c; //一个字符一个字符输出
}
//不推荐,效率低