C++读取一行文本

版权声明:本文为博主原创文章,未经博主允许不得转载。 如果转载,需要获得作者授权。保留追究法律责任的权力。 https://blog.csdn.net/chinabinlang/article/details/80831298
#include <fstream>
#include <vector>
#include <iostream>     // std::cout, std::ostream, std::hex
#include <sstream>      // std::stringbuf

#include <string>       // std::string


一:

从文本文件读取:

void read_line_from_txt()
{
char strLine[1000000] = { 0 };

std::vector<std::string> vctor_string;


std::ifstream filestream;// filestream("F:\\t1.txt");

filestream.open("F:\\t1.txt");

while (true)
{
filestream.getline(strLine, 1000);

int ncount = filestream.gcount();

if (ncount == 0)
{
break;
}

vctor_string.push_back(std::string(strLine));
}

filestream.close();

for ( int n = 0 ; n<vctor_string.size(); n++)
{
MessageBox(CString(vctor_string.at(n).c_str()));
}

}



二:从内存数据读取line:

//繁琐;

void read_line_from_buf()
{
std::vector<std::string> vctor_string;

const int nFileLen = 870;

char buf[nFileLen] = { 0 };

FILE * f = fopen("F:\\t1.txt", "r+b");
fread(buf, 1, nFileLen, f);
fclose(f);

//streambuf
std::stringbuf file_streambufObj;

//istream
std::istream istreamObj(/*pstreambuf*/&file_streambufObj);

//std::streambuf * pstreambuf = file_streambufObj.pubsetbuf(buf, nFileLen);
file_streambufObj.sputn(buf, nFileLen);

while (true)
{
char strchLine[1000] = { 0 };

istreamObj.getline(strchLine, 1000);

if (strlen(strchLine) > 0)
{
vctor_string.push_back(std::string(strchLine));
}
else
{
break;
}
}

for (int n = 0; n < vctor_string.size(); n++)
{
MessageBox(CString(vctor_string.at(n).c_str()));
}
}



上面的方法还是有些繁琐,还是自己写:

一般换行符时‘\n’,也有可能时别的,如“\r\n”; 

void read_line_from_buffer_or_txt()

{

std::vector<std::string> vctor_string;

const int nFileLen = 870; //具体可以先函数计算;

char buf[nFileLen] = { 0 };

FILE * f = fopen("F:\\t1.txt", "r+b");

fread(buf, 1, nFileLen, f);

fclose(f);

{
std::string strTempLine;

for (int n = 0; n<nFileLen; n++)
{
if (buf[n] != '\n')
{
strTempLine.push_back(buf[n]);
}
else
{
vctor_string.push_back(strTempLine);

strTempLine.clear();
}
}

for (int n = 0; n < vctor_string.size(); n++)
{
MessageBox(CString(vctor_string.at(n).c_str()));
}

}

}



猜你喜欢

转载自blog.csdn.net/chinabinlang/article/details/80831298