文件行计数使用boost

时间:2014-05-22 14:37:38

标签: c++ boost

简单的问题:如果我有一个boost :: filesystem :: path对象,我怎样才能得到这个文件的行数?我需要比较两个文件的行数作为前置条件检查。

我最近刚刚提升并且更习惯于使用Java进行编程。我已经在网上搜索过,并且无法找到这样一个简单任务的例子。

非常感谢!

3 个答案:

答案 0 :(得分:5)

您可以这样做:

std::ifstream file(path.c_str());

// Number of lines in the file
int n = std::count(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), '\n');

pathboost::filesystem::path的位置。这将计算文件中\n的数量,因此如果文件末尾有\n以获得正确的行数,则需要注意。

答案 1 :(得分:2)

您可以使用ifstream和getline逐行读取,并对其进行计数。

std::ifstream filein("aaa.txt");
int count = 0;
std::string line; 
while (std::getline(filein, line))
{
    count++;
}
std::cout << "file line count is " << count;

答案 2 :(得分:0)

使用stringstream,我建议使用中间字符串,否则在计数期间将使用streamstring,迭代器将不在下一个getline的字符串的开头。

string s = string("1\n2\n3\nlast");
stringstream sstream(s);  
int nbOfLines = std::count(s.begin(), s.end(), '\n');
cout << "Nb of lines is: " << nbOfLines << endl;  

结果:

Nb of lines is: 3

你可以从头开始做getline。

或者,为了获得更好的表现(更少的副本),请回头看看

int nbOfLines = std::count(std::istreambuf_iterator<char>sstream),std::istreambuf_iterator<char>(), '\n');
sstream.seekg(0, ios_base::beg);