文本文件无法通过ifstream打开

时间:2018-06-25 19:14:37

标签: c++ fstream ifstream

我正在尝试在程序中打开文件以从中导入一些信息。代码的相关部分是这一段:

Airport::Airport(string& apt) {
    ifstream datasid;
    ifstream datastar;
    ICAO = apt;
    if (ICAO == "LEPA"){ //fill map with points and their departure
        datasid.open("LEPASID.txt");
        datastar.open("LEPASTAR.txt");
    }
    else if (ICAO == "LEAL"){ //fill map with points and their departure
        datasid.open("LEALSID.txt");
        datastar.open("LEALSTAR.txt");
    }
    else {
        cout << "El aeropuerto no se encuentra en la base de datos." << endl;
        correct = false;
    }

    if (datasid.fail() or datastar.fail()) cout << "Se ha producido un error al leer los datos del aeropuerto" << endl;

运行程序时,出现错误:

  

没有任何错误的生产商品

表示datasiddatastar失败。

文件与源文件位于同一目录中,我检查了名称是否正确。

2 个答案:

答案 0 :(得分:2)

我已经使用main()在Visual Studio中运行了该程序,并且在解决了一些问题之后对我来说效果很好:

  • 添加标头:字符串,fstream,iostream。
  • 为ICAO设置std :: string。
  • 在函数中添加返回类型,并在末尾添加“ return what”。
  • 我使用了||而不是“或”。
  • 设置“正确的”布尔类型。
  • 添加所有的“ std ::”。

这是我的工作代码。这对我有用。检查与您的差异(我添加了std::couts来检查哪个if被激活)。如果仍然不起作用,则可能是您的变量ICAO(不是LEAL或LEPA),您的Airport类或您的.txt文件中没有问题正确的目录。

#include <string>
#include <fstream>
#include <iostream>

int main() {
    std::string apt = "LEPA";
    std::ifstream datasid;
    std::ifstream datastar;
    std::string ICAO = apt; 
    if (ICAO == "LEPA") {
        datasid.open("LEPASID.txt");
        datastar.open("LEPASTAR.txt");
        std::cout << "LEPA OK";
    }
    else if (ICAO == "LEAL") { 
        datasid.open("LEALSID.txt");
        datastar.open("LEALSTAR.txt");
        std::cout << "LEAL OK";
    }
    else {
        std::cout << "El aeropuerto no se encuentra en la base de datos." << std::endl;
        bool correct = false;
    }

    if (datasid.fail() || datastar.fail()) 
         std::cout << "Se ha producido un error al leer los datos del aeropuerto" 
                   << std::endl;

答案 1 :(得分:0)

我将所有文件(包括源文件,可执行文件等)移到了新目录。现在正在工作。我认为旧目录存在某种问题。