C++也能完成文件的读写,通过引入 fstream来调用文件操作方法,以下是文本文件读写的代码.
首先引入依赖
#include <iostream> //操作流的依赖 此处用于实处
#include <string> //string的依赖 此处为了使用字符串
#include <fstream> //文件操作
using namespace std; //string的命名空间 用于限定
然后是创建读写文件的对象
ifstream ifs;//读文件
ofstream ofs;//写文件
fstream fs;//读写文件
fstream 同时包含了读与写的功能,所以如果使用它就不需要使用前两个了
此处的操作顺序为先写文件,然后再读文件,以下为了效果,所以使用的是单独的读或写文件的对象.
文件的写入首先需要打开或创建指定的文件
ofs.open("text.txt",ios::out);
使用写文件的open方法,传入两个参数,第一个参数为打开的文件,路径加名称,没有路径则为当前文件夹下,第二个参数为打开方式,ios::in读,ios::out 写,ios::ate初始位置,ios::app文件尾,ios::trund如果文件存在,则删除原文件,然后再创建,ios::binary追加写入.如果需要同时使用多个功能,则通过符号’|’来分割,例如:ios::trund|ios::in,已二进制方式读写文件
打开文件后,就可以写入文件了.
ofs << "这是文件的第一行" << endl;
ofs << "这是文件的第二行" << endl;
ofs << "这是文件的最后一行" << endl;
写入的写法较为简单,与输出的写法类似,也可以通过endl或\n来换行
写入完成后就可以通过读取来看效果了,
ifs.open("text.txt", ios::in);//读文件
一样是打开文件.注:打开文件的方式除了使用open方法外,还可以在创建对象时就直接传参,传入的参数与open方法的参数一致
然后为了防止文件打开失败而导致读取代码出现问题,所以可以先判断
if (!(ifs.is_open()))
{
cout << "文件打开失败!!!" << endl;
return 0;
}
读写的对象有一个is_open()的成员方法,可以用来判断文件是否打开成功,
如果打开失败,则提示用户,然后跳出方法.注:此处由于是直接写在main方法中,所以返回值是0.如果是其他方法,请自行注意放回值
文件打开后就可以读取了,读取的方法一共有四种
第一种:使用字符数组直接读取ifs对象中的内容
//方式一
char buf[1024] = { 0 };
while (ifs >> buf) //当读到文件尾时会返回false
{
cout << buf << endl;
}
第二种:一样使用字符数组,但通过ifs对象的getlien成员方法直接以行的形式读取
//方式二
char buf[1024] = { 0 };
while (ifs.getline(buf,1024)) {
cout << buf << endl;
}
getline: 以行为单位进行读取,第一个参数为读取的数据,第二个参数为单次读取的最大读取量,单位为bit
第三种:使用string存储查出的数据,使用全局的getline方法查询
//方式三
string buf;
while (getline(ifs, buf))
{
cout << buf << endl;
}
全局的getline函数的参数:第一个为读取的对象,第二个是接收的变量
第四种:使用字符.通过ifs的get方法查询,单次读取一个字符,效率较低,不推荐使用
//方式四 不推荐使用,效率较低
char buf;
while ((buf = ifs.get()) != EOF)
{
cout << buf;
}
注: EOF 为 End Of File 文件结尾
读取与写入都完成后,不要忘记关闭流
ofs.close();
ifs.close();
fs.close();