#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()));
}
}
}