当前位置:C++技术网 > 资讯 > 利用STL中的fstream来读取大数据txt文件

利用STL中的fstream来读取大数据txt文件

更新时间:2016-03-20 22:32:15浏览次数:1+次

 实例读取大数据文件》(http://www.cjjjs.com/paper/gzsh/20151125233837322.aspx)一文中,我用C++的文件IO来读取了一个比较大的文本文件,而且用到了二进制来读取,要不然的话,就会读不完整。这两天开始学习系统性的学习STL,因为,我发现,要学好C++,STL不能不学好。特别是你去面试的时候,如果遇到了面试题,当你用算法解决问题的时候,如果你的STL基础很好,就能写出让考官都眼前一亮的代码。下面开始进入正题:
今天看书看到了C++探秘中的文件I/O操作那一块,可是书上的例子读取的是int类型的数据,后来,我尝试了一下读取char类型的数据,可以很好地读取,我将在下篇文章介绍。然后,我又尝试了一下读取string类型的数据,也是能够读取,但是,一旦尝试了读取比较大的数据,就不行了,尽管能够完整的读出来,但是!如果文本文件中空行就不能读取出来。
#include "iostream"
#include "fstream"
#include "windows.h"
#include "string"

using namespace std;

int main()
{
ifstream in("C:\\操作.txt",ios::binary);
if (!in.is_open())
{
cout<<"打开失败!"<<'\n';
}
else
{
ofstream out("C:\\写入8.txt",ios::binary);
if (!out.is_open())
{
cout<<"打开文件失败!"<<'\n';
}
else
{
cout<<"打开文件成功!"<<'\n';
string str;
while(!in.eof())
{
in>>str;
out<<str<<endl;
}
out.close();
}
}
system("pause");
return 0;
}

能够完整的读出来,可是空行的却不能,也不能换行。换行简单,我们加个"\r\n",就行了。可是文本文件中,有空行的还是不显示出来。因此,我就开始研究。最后,我怀疑是eof的问题,其实最终验证并不是,而是in>>str这句代码的问题。于是换了种读取的方法,看下面的完整的代码:
#include "iostream"
#include "fstream"
#include "windows.h"
#include "string"

using namespace std;

int main()
{
ifstream in("C:\\测试.txt");
if (!in.is_open())
{
cout<<"打开失败!"<<'\n';
}
else
{
ofstream out("C:\\写入4.txt");
if (!out.is_open())
{
cout<<"打开文件失败!"<<'\n';
}
else
{
cout<<"打开文件成功!"<<'\n';
string str;
while(getline (in, str))
{
out<<str<<endl;
}
out.close();
}
}
system("pause");
return 0;
}

最终装逼成功!