查找文件流的结尾

finding the end of a filestream

本文关键字:结尾 文件 查找      更新时间:2023-10-16

我正在尝试通过在自定义类客户中重载运算符>>()函数,将文本文件中的标记化数据读取到指针向量中。 我的代码可以很好地读取整个文件,但是完成后我遇到了SEG错误

这是我的代码:

int line = 0;
vector<Customer *> customers;
ifstream fin("customers.txt", ios_base::in);
while (fin)
{
    Customer *temp = new Customer();
    line++;
    try
    {
        fin >> *temp;
        customers.push_back(temp);
    }
    catch(boost::bad_lexical_cast&)
    {
         cerr << "Bad data found at line " << line
             << " in file customers.txt" << endl;
    }
}

假设重载运算符>>() 函数使用 getline() 读取一行并将数据插入到指向 Customer 的临时指针中,如果发现任何无效数据,则抛出bad_lexical_cast。

我意识到我可以改变:

while (fin)

自:

while (fin >> *temp)

但是我想保留 try/catch 块,因为如果发现错误数据,我只想让它跳过该行并继续下一行。

我能做些什么来测试下一行是否存在而不实际拉动它? 类似于 scanner 类中的 Java hasNextLine?

任何帮助将不胜感激

您必须检查 fin >> *temp 的输出。如果读取失败(即文件结尾),则返回false

您可以将该行更改为:

if(!(fin >> *temp)) break;

(有关类似问题/问题的答案,另请参阅此处。