【问题标题】:How do I tell a program where to start reading a .txt file? [closed]如何告诉程序从哪里开始读取 .txt 文件? [关闭]
【发布时间】:2016-08-03 22:36:36
【问题描述】:

我希望我的程序能够记住它在 .txt 文件中的中断位置,以便在通过循环重复时继续下一个输入。 例如,一个文本文件包含:

Apples
Bananas
Oranges

将通过函数GetItem() 访问,该函数将下一个文件输入附加到项目向量中。如何使函数第一次添加Apples,第二次添加Bananas,第三次迭代添加Oranges?到目前为止,每次调用GetItem() 都会不断将第一个元素添加到向量中,从而得到一个包含以下内容的向量:

Apples
Apples
Apples

因为文件从头开始一直打开。任何帮助将不胜感激。

这是我可以包含的大量代码的简化版本,但会分散问题的主要目的。如果需要代码,我很乐意将其包含在内。

vector<Item*> AddItemToInventory(vector<Item*> inventory) {
if (inptLctn == 'f') {
        inptFile.open("TestFood.txt");
        if (!inptFile.is_open()) {
            cout << "Could not open file." << endl;
            exit(1);
            }
            inptFile >> usrInptName;
            inptFile >> usrInptQnty;
            inptFile >> usrInptExpr;
            inptFile >> usrInptPrice;

            }
prdc = new Produce;
    prdc->SetName(usrInptName);
    prdc->SetQuantity(usrInptQnty);
    prdc->SetExpiration(usrInptExpr);
    prdc->SetPrice(usrInptPrice);
    inventory.push_back(prdc);

    return inventory;
}

【问题讨论】:

  • 你为什么要关闭文件?
  • 怎么样:不要每次都关闭再打开文件?
  • 请分享您的代码,以便我们做出有根据的猜测。 :D 是的,或者您正在每次迭代中关闭和打开文件,或者您指向文件的指针没有移动...
  • @ntjess 这是处理文件的正常方式,如果您不关闭并重新打开它,它会自动发生。
  • 将其更改为AddItemToInventory(vector&lt;Item*&gt; inventory, ifstream &amp;inptFile),然后让调用者负责打开和关闭ifstream

标签: c++ loops fstream ifstream seekg


【解决方案1】:

使用前打开文件,使用完毕后关闭文件。问题是您不断关闭输入文件,因此当您重新打开它时,它又从头开始。

您应该只打开和关闭一次输入文件。

【讨论】:

  • 好的,谢谢。这是否意味着我应该在 main 中打开和关闭文件?
  • 因为我在这样做时遇到了范围问题:/
  • 打开是。它会在超出范围时自行关闭。
  • 当然,您可以在 main.js 中打开。然后你必须通过引用调用函数来传递输入流。如果按值传递,则调用函数中输入流对象的副本不会与文件有关联。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
相关资源
最近更新 更多