使用C++标准库实现文件的读取
来源:互联网 发布:淘宝网实拍保护网址 编辑:程序博客网 时间:2024/06/08 07:03
实现将文件读取到一个字符串中,已用来输出,可以使用c++标准库。比如有以下文件
test.txt
Hello world,
------------------------------
这里是一个测试文件,
以测试使用c++ STL文件读取的情况
一开始尝试定义一个fstream对象fin进行输出的时候,但是会遇到碰到空格就停止的情况
std::fstream fin;
fin.open("test.txt",std::ifstream::in);
string strFile;
fin >> strFile;
std::cout << strFile << std::endl;
后来尝试定义格式状态noskipws,结果问题依旧
fin >> std::noskipws;
当然可以用getline循环读入每一行来获取文件的文本,但是这样好像麻烦了很多。后来搜索到两种很好的解决办法,一种是用我们的文件输入流定义输入流迭代器。然后直接用迭代器初始化字符串;另一种方法是用rdbuf函数重定义文件流到一个字符流,然后用这个字符流来初始化字符串。
具体的实现代码如下:详细解释参考注释部分
Main.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iterator>
using namespace std;
//使用C++标准库实现文件的读取
int main()
{
//--------------------------------------------------------
//定义一个文件输入流对象
fstream fin;
fin.open("test.txt",ifstream::in);
if(!fin)
{
cerr << "test.txt打开失败!" << endl;
return -1;
}
cout << "方法1:使用输入迭代器" << endl;
fstream::fmtflags oldFlag = fin.flags();
fin >> noskipws; //忽视文件输入流中的空格;
istream_iterator<char> itrBegin(fin),itrEnd;//定义一个输入迭代器
string strFile1(itrBegin,itrEnd); //使用两个迭代器作为参数构造string对象
cout << strFile1 << endl;
fin.flags(oldFlag); //恢复文件流
//--------------------------------------------------------
fstream fin2;
fin2.open("test.txt",ifstream::in);
if(!fin2)
{
cerr << "test.txt打开失败!" << endl;
return -1;
}
cout << "/n/n方法2:使用重定向流" << endl;
ostringstream sout_temp; //定义一个字符流输出流对象
sout_temp << fin2.rdbuf(); //将文件流重定向至字符流
string strFile2(sout_temp.str());
cout << strFile2 << endl;
return 0;
}
- 使用C++标准库实现文件的读取
- 使用标准C读取文件遇到的结构体对齐问题及其解决办法
- [C/C++标准库]_[初级]_[C++ iostream read getline 读取文件慢的原因]
- Winform(C#)实现XML文件的读取
- 标准C++ 读取写入文件代码
- c++builder读取标准ini文件操作
- c++builder读取标准ini文件操作
- C 标准库 atoi 函数的实现
- C 标准库 abs 函数的实现
- C 标准库 atof 函数的实现
- C 标准库 bsearch 函数的实现
- C 标准库 strcpy 函数的实现
- C 标准库 strcat 函数的实现
- C 标准库 strchr 函数的实现
- C 标准库 strcmp 函数的实现
- C 标准库 strcspn 函数的实现
- C 标准库 strlen 函数的实现
- C 标准库 strstr 函数的实现
- 悲剧男--东软校园高端招聘小记(网络安全部)
- 顶置的技能树( 进度表 )
- C和C++语言学习总结(资料来自 林锐博士 2001 年7 月24)
- MSSQL系列之十五 全文索引
- gnochm 安装
- 使用C++标准库实现文件的读取
- OPhone自定义UI控件的实现原理解析
- 對Win7的VPN客戶端“加密”的理解
- Linux下载工具Curl详解
- HDU 1556 Color the ball 很典型的更新区间查找点的题(线段树树状数组两种解法)
- 软件水平 小结
- 【动态树】poj2763
- 100921 中软实训之调试、〈MFC WINDOWS程序设计〉之鼠标画图
- 权限系统概要