简单的问题:如果我有一个boost :: filesystem :: path对象,我怎样才能得到这个文件的行数?我需要比较两个文件的行数作为前置条件检查。
我最近刚刚提升并且更习惯于使用Java进行编程。我已经在网上搜索过,并且无法找到这样一个简单任务的例子。
非常感谢!
答案 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');
path
是boost::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);