【问题标题】:A file reading function文件读取功能
【发布时间】:2014-03-24 16:46:49
【问题描述】:

我需要编写一个函数来读取文件,并且理想情况下将该文件中的字符串存储到strings 的vector 中。

到目前为止,我有这样的事情:

void loadCars() {
    fstream carFile;
    string car;
    carFile.open("car.txt");
    if (carFile.is_open()) {
        while (getline(carFile, car)) {
            cout << car << "\n";
        }
        carFile.close();
    } else {
        cout << "unable to open file" << endl;
    }
}

谁能帮帮我,我需要这个函数做的就是从一个包含四个字符串的文本文件中读取:

汽车1
汽车2
汽车3
汽车4

我想阅读它们并将它们理想地放入向量中。 cout 纯粹是为了让我尝试测试它是否有效,但它无法打开文件。

【问题讨论】:

  • 您面临的具体问题是什么?
  • 程序是否向您回读"unable to open file"?如果是,该文件是否在您的可执行文件的目录中?
  • 如果您无法打开文件,很可能您当前的工作目录不在您认为的位置。快速执行getcwd() 并将生成的目录转储到std::cerr 将帮助您了解您的“位置”。文件权限也有可能不允许您打开它,但这有点牵强。最后,如果这是从 Visual Studio 运行的,则 project 文件 (.vcprojx) 所在的文件夹是调试器启动的默认工作目录。确保您的文件在文件夹中。
  • 是的,感谢大家的反馈,我在放置文件的位置出错了。由于我之前写过文件,所以它将该文件存储在调试文件夹之外。所以我把文件从那个文件夹里拿出来阅读,但是我只是把汽车文件放在调试文件夹里,它工作得很好!谢谢大家!
  • @JamesMillner 如果这些对您有帮助,请考虑接受其中一个答案。

标签: c++ string file-io vector


【解决方案1】:

理想情况下,将该文件中的字符串存储到字符串向量中。

只需按如下方式扩展您的函数,以将结果收集到向量中:

void loadCars(std::vector<std::string>& result) {
    result.clear();
    fstream carFile;
    string car;
    carFile.open("car.txt");
    if (carFile.is_open()) {
        while (getline(carFile, car)) {
            result.push_back(car);
            cout << car << "\n";
        }
        carFile.close();
    }
else {
        cout << "unable to open file" << endl;
    }
}

至于您打开文件的问题,这很可能是因为该文件在您的程序当前工作目录中不可用(检查您的调试设置),或者您没有访问权限。

【讨论】:

    【解决方案2】:

    你可以定义一个字符串向量,例如

    #include <array>
    
    std::vector<std::string> cars;
    
    // Get your car...
    cars.push_back(car);
    

    请参阅 here 获取最新参考。

    【讨论】:

      猜你喜欢
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多