c++学习笔记:文件流的各种操作
2017-07-31 20:04
316 查看
欲使用ifstream和ofstream,首先需要引用fstream
一、使用ifstream读取文件的全部文本
二、分前后两段,读取文件的全部文本
三、直接在文件末尾添加一段文字
四、复制文件的内容,用复制的内容替代以前的内容,其实相当于什么都不干
此外,如果读取一个文件之后,需要读取下一个,直接调用clear方法就可以接着干了。
嗯,最常用的方法就学到这里,其他的遇到自行查阅api,下次开始学习sstream
#include <fstream>
一、使用ifstream读取文件的全部文本
ifstream ifs; string path("src/test.txt");//考虑到最终程序最终执行环境是在工程目录下的,所以这里用此路径 ifs.open(path);//open可以传第二个参数,六个值in:以读方式打开;out:以写方式打开,直接写入将覆盖,但是可以移动指针,在文件末尾写入;binary:操作方式将更倾向于二进制;ate:打开时在打开状态输出默认会在文件的末尾(EOF),但未在打开状态会清空该文件;app:输出也是在文件末尾展开,不会清空该文件;trunc:任何打开前的内容,都将会被清空。 值得注意的是:如果该文件的上层目录不存在的话,将肯定会失败,反之,则没有该文件时候,会自动创建一个 string str;
string line; if(ifs){//隐式转换为bool while(getline(ifs,line)){ str +=line; } cout<<str<<endl; }else{ cout<<"真不好意思,打开失败了"<<endl; }
二、分前后两段,读取文件的全部文本
ifstream ifs; string path("src/test.txt"); ifs.open(path,ios::binary); if(ifs){ ifs.seekg(0,ios::end);//指针指向流的末尾,相对于末尾的偏移量为0,另外此方法还有传入一个参数的重载版本,传入的是一个相对于文件结束位置的绝对值 int length = static_cast<int>(ifs.tellg());//tellg返回当前指针的位置,从0开始,end指向的刚好是文件结束位置的下一位,所以end的位置刚好是文件的字节数,所以如果是汉字,使用二进制一半一半读取的话,中间一个汉字可能被拆分而成为乱码 ifs.seekg(0,ios::beg);//可以穿 end:流的末位的下一位,beg:流的开始位置和cur:当前读取位置。 int strLength1 = length/2; int strLength2 = length%2==0?strLength1:strLength1; char str1[strLength1+1]; char str2[strLength2+1]; ifs.read(str1,strLength1); ifs.read(str2,strLength2); ifs.close(); cout<<str1<<endl<<endl<<endl<<endl<<str2; }else{ cout<<"真不好意思,打开失败了"<<endl; }
三、直接在文件末尾添加一段文字
ofstream ofs; string path("src/test.txt"); ofs.open(path,ios::app);//以append方式打开文件 string text("三月,伪文学家发情的、无病呻吟的季节"); ofs.write(text.c_str(),text.length()); ofs.close();
四、复制文件的内容,用复制的内容替代以前的内容,其实相当于什么都不干
ifstream ifs; string path("src/test.txt"); ifs.open(path,ios::in); char* data; int length = -1; if(ifs){ ifs.seekg(0,ios::end); length = static_cast<int>(ifs.tellg()); ifs.seekg(0,ios::beg); char str[length+1]; data = str; ifs.read(str,length); ifs.close(); } if(length!=-1){ ofstream ofs; ofs.open(path,ios::ate|ios::out);//清空模式 if(ofs){ ofs.write(data,length); ofs.close(); cout<<"写入成功"<<endl; } }
此外,如果读取一个文件之后,需要读取下一个,直接调用clear方法就可以接着干了。
嗯,最常用的方法就学到这里,其他的遇到自行查阅api,下次开始学习sstream
相关文章推荐
- C/C++学习笔记2 - cin深入分析(上) - cin输入操作处理
- C++操作Word学习笔记
- 小白教你学习C++(9)文件流操作
- C++学习笔记:IO操作
- javascript学习笔记(九):DOM操作HTML的各种方法使用
- C/C++学习笔记27:(二)C文件系统操作
- 【C/C++学习笔记】结构体的位域操作小结
- C++基础的不能再基础的学习笔记——顺序容器(其他操作)
- Windows 8 学习笔记(二十三)--WritableBitmap的读写操作C++
- C++数据库操作学习笔记:ADO基础知识
- mongodb学习笔记--C++操作mongodb
- 【C++学习笔记】文件操作编程基础
- C++学习笔记之对文件的操作<1>
- C++学习笔记:IO操作
- Armadillo C++ linear algebra library 学习笔记(2)——矩阵的基本操作(1)
- C++ Primer 学习笔记——顺序容器的string操作
- Armadillo C++ linear algebra library 学习笔记(3)——矩阵的基本操作(2)
- C++学习笔记之对文件的操作<1>
- c++学习笔记-bitset操作
- 文件流操作学习笔记