- 前言
- 读写文件基础 *** 作
- 写文件
- 读文件
- openmode
- 晋级 *** 作
- 随机读文件
- 随机写文件
- < ifstream> 读取文件的内容
- < ofstream> 用于创建文件并向文件中写入内容
- < fstream > 同时具有ofstream和ifstream两种功能
//1包含头文件 #include读文件#include using namespace std; int main() { //创建对象 ofstream ofs; //以写入和追加到文件末尾方式打开文件 ofs.open("file.text",ios::out|ios::app); //判断文件是否成功打开了 if (!ofs.is_open()) { cout << "文件打开失败" << endl; ofs.close(); exit(-1); } //写入文件 ofs << " 11111 15"; //关闭 ofs.close(); }
#include#include using namespace std; int main() { string file; cout<<"请输入文件名"< >file; ifstream ifs(file.c_str(),ios::in);//读 *** 作 if (!ifs.is_open()) { cerr << "文件打开失败" << endl; ifs.close(); exit(-1); } char buffer[1024] = { 0 }; int n;//计数 //读取文件时,但读到文件末尾时,ifs>>buffer条件会为假 //碰到空格时,while循环会执行一次并将多到的数据存到buffer中。 while (ifs >> buffer) { n++; cout << buffer << endl; } cout<<"循环执行"< openmode
- 注意:上面写文件的创建对象和打开文件可以像读文
件那样合并到一起,两者的效果等效。如:
ofstreamofs(“file.text”,ios::out|ios::app);- open()函数有两个重载,原型为:
void open( const char *filename );
void open( const char *filename, openmode mode );
注意:filename类型为c风格字符串,如果使用string请注意使用file.c_str()将其转为c风格。
ios::in 为读取打开文件
ios::out 为写入打开文件
ios::trunc 覆盖原来已经存在的文件(具有写属性)
当文件已经存在了,进行写文件时,将删除原来所有内容从新进行写数据。 注意,此项只能用于写文件中,用于读文件会导致文件打不开,或读出空数据。ios::app 在文件末尾添加数据,不会覆盖原来的数据
ios::ate 当已打开时寻找到EOF(文件末尾)在写文件时,会清空原来的数据,在读文件时会定位到文件末尾,导致读出数据为空
ios::binary 以二进制模式打开文件
openmode的组合有许多,篇幅问题就不一一介绍了,感兴趣的小伙伴可以自己动手实践实践,可以加深自己的动手能力,毕竟自己动手总结的要远比别人总结后告诉你要更有成就感。
你也可以像示例那样可以使用|将多个openmode连接到一起使用。但要注意:有冲突的openmode一起使用会导致文件打开出错 如:ios::app|ios::trunc.
晋级 *** 作 随机读文件#include#include using namespace std; int main() { ifstream ifs("file.text", ios::in | ios::binary);//读 *** 作 if (!ifs.is_open()) { cerr << "文件打开3失败" << endl; ifs.close(); exit(-1); } char buffer[1024] = { 0 }; //获取当前指针位置 streampos pos = ifs.tellg(); cout << pos << endl; //定位到指定位置 ifs.seekg(3,ios::cur); //将数据从指定位置读到buffer中,对应的写有write() ifs.read(buffer, sizeof(buffer)); cout << buffer << endl; ifs.close(); }
- 函数read()用于输入流,在将字符放入buffer 之前从流中读取num 个字节。如果碰到EOF,read()中止。第一个参数必须要转换为char*才可以。
- tellg()函数用于输入流,并返回流中"get"指针的当前位置。注意返回的类型为streampos。
- 函数seekg()用于输入流,并且它将重新设置"get"指针到当前流的从origin偏移offset个字节的位置上,或是置"get"指针在position位置。 它有两重载函数,依次对应上面两种情况
istream &seekg( off_type offset, ios::seekdir origin );
istream &seekg( pos_type position );ios::seekdir有三种取值分别为:
- ios::cur 表示输入/输出流当前的位置。
ios::beg 表示输入/输出流开始的位置。
ios::end 表示输入/输出流结束的位置。第一个参数是偏移量,整数表示向后偏移,负数表示向前偏移。
随机写文件输入流 *** 作:seekg()和tellg()。
输出流 *** 作: seekp()和tellp()。
他们相互对应的,基本 *** 作也都一样,唯一不同的是,一个用于输入流一个用于输出流。因此便不详细说明了,给大家留个例子仅供参考。#include#include using namespace std; int mian() { //1包含头文件 //创建对象 ofstream ofs; //打开方式 ofs.open("file.text", ios::out | ios::binary ); //判断文件是否成功打开了 if (!ofs.is_open()) { cerr << "文件打开失败" << endl; exit(-1); } //获取当前指针位置 streampos pos=ofs.tellp(); //从当前指针位置开始写 //ofs.seekp(pos); //从开始位置往后移动三下的位置开始写数据, //会清空原来的数据 ofs.seekp(3, ios::beg); 写入文件 ofs << " 11111 15"; //关闭 ofs.close(); } 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)