I am using the following code for reading lines from a text-file. What is the best method for handling the case where the line is greater than the limi开发者_运维问答t SIZE_MAX_LINE?
void TextFileReader::read(string inFilename)
{
ifstream xInFile(inFilename.c_str());
if(!xInFile){
return;
}
char acLine[SIZE_MAX_LINE + 1];
while(xInFile){
xInFile.getline(acLine, SIZE_MAX_LINE);
if(xInFile){
m_sStream.append(acLine); //Appending read line to string
}
}
xInFile.close();
}
Don't use istream::getline()
. It deals with naked character buffers and is therefor prone to errors. Better use std::getline(std::istream&,std::string&, char='\n')
from the <string>
header:
std::string line;
while(std::getline(xInFile, line)) {
m_sStream.append(line);
m_sStream.append('\n'); // getline() consumes '\n'
}
Since you're using C++ and iostream already, why not use std::string
's getline
function?
std::string acLine;
while(xInFile){
std::getline(xInFile, acLine);
// etc.
}
And, use xInFile.good()
to ensure eofbit
and badbit
and failbit
are not set.
If you use the free function in string, you don't have to pass a max length. It also the uses C++ string type.
精彩评论