【问题标题】:ifstream failing to openifstream 无法打开
【发布时间】:2014-02-09 17:10:03
【问题描述】:

我正在使用 Visual Studio 2013

所以我必须打开一个 .ppm 图像文件并对其进行一些处理,但我试图用来读取数据的 ifstream 无法打开图像文件。我很确定图像文件在工作目录中(我已经创建并阅读了一些简单的 .txt 文件以确保)。即使经过大量研究,我也无法弄清楚发生了什么。

这是相关代码

编辑:我添加了更多代码来了解我想要做什么

Image * PPMImageReader::read(std::string filename){

        std::string line;
        int width, height, max_val;


        std::ifstream src(filename, std::ios_base::binary);



        if (src.fail()) { //failbit is always set but not badbit
            perror("Logical error on i/o operation. failbit was set\n");
            if (src.bad())
                perror("Read/writing error on i/o operation. badbit was set");
        } 
        if (!src.is_open()) { //and of course this return true
            printf("File was not opened\n");
            exit(1);
        }

     //Edited

     getline(src, line, '\n');

        if (line.empty())
            getline(src, line);

        if (line.find("P6") == std::string::npos) {
            printf("wrong format\n");
            exit(1);
        } 

【问题讨论】:

  • 我很确定文件路径不正确。您可以尝试使用硬编码绝对路径吗?即使您的工作目录中有文件,您的应用程序启动目录也可能不同。
  • @Digital_Reality 它确实可以使用绝对路径,但它不是很方便,因为文件名是命令行参数。请原谅我的无知,但是启动目录是什么?

标签: c++ visual-studio ifstream


【解决方案1】:

从讨论中了解到问题是相对路径。

fstream 支持如下相对路径..

考虑以下情况,您的输入文件比 exe 文件高一级。

E:\MyProgramBin\YourExe.exe
E:\YourInputFile.ppm

在这种情况下,您可以创建如下文件名。

filename1 = "..\YourInputFile.ppm"

并在ifstream中使用filename1

std::ifstream src(filename1, std::ios_base::binary);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多