试图理解流在读取整个文件时失败的原因

时间:2015-12-18 19:12:21

标签: c++ ifstream

我正在尝试使用简单的ifstream读取整个文本文件。

代码

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main()

{
    std::string line;
    std::vector<std::string> DataArray;
    //std::vector<std::string> QueryArray;
    std::string filename = "c:\\helloworld.txt";
    std::ifstream myfile(filename.c_str());
    //std::ifstream qfile("queries.txt");

    if (myfile.fail()) {
        perror("c:\\helloworld.txt");
        getchar();
        return -1;
    }

    if (!myfile) //Always test the file open.
    {
        std::cout << "Error opening output file" << std::endl;
        system("pause");
        return -1;
    }
    while (std::getline(myfile, line))
    {
        DataArray.push_back(line);
    }

    /*if (!qfile) //Always test the file open.
    {
        std::cout << "Error opening output file" << std::endl;
        system("pause");
        return -1;
    }

    while (std::getline(qfile, line))
    {
        QueryArray.push_back(line);
    }*/

    //std::cout << QueryArray[20] << std::endl;
    std::cout << DataArray[7] << std::endl;
    return 0;
}

结果

我得到以下结果:

  

打开输出文件时出错

文本文件my_text_file.txt正好位于我的程序的同一目录中。

最后的问题

看起来它无法读取my_text_file.txt,为什么?我做错了吗?

同时改变

std::ifstream myfile("c:\\my_text_file.txt");

std::ifstream myfile("my_text_file.txt");

无法解决问题。

1 个答案:

答案 0 :(得分:0)

我认为您的错误可能是由多种原因引起的。 有一个方便的错误消息解释事物称为perror(c++ reference perror)。 使用它的标准方法(在声明文件后):

if(myFile.fail()){
    perror("my_text_file.txt");
    return -1;
}

这应该会给你一个关于这个问题的更详细的报告,它可以告诉你问题是否真的是文件的目录。希望这会有所帮助。