在C ++中打开文件时出错:从字符串中获取字符时出错

时间:2016-02-14 14:30:30

标签: c++ string file io

所以我有一些打开文件的代码:

#include <string>
#include <fstream>
#include <iostream>
#include <stdio.h>

void OpenFile(std::string filename);

int main()
{
    OpenFile("c:\\Programming\\Viper\\ViperEngine\\Debug\\plop.png");

    return 0;
}

void OpenFile(std::string filename)
{
    std::ifstream file(filename, std::ios::in | std::ios::binary);

    if(!file.good())
    {
        std::cout << "I am Error";
        std::cin.get();

        return;
    }

    std::cin.ignore();

    file.close();
}

这对我来说都很好看,除了它不起作用。当我运行调试器时,它表示Seteback和setegptr等于0xcccccccc,并且在尝试打开文件时读取字符串中的字符时出错。我尝试将文件名硬编码到文件打开调用中(std :: ifstream texFile(&#34; c:\ Programming \ Viper \ ViperEngine \ Debug \ floop.png&#34;,std :: ios :: in | std :: ios :: binary)),但仍然没有用。奇怪的是,如果我使用名为&#34; bloop.bmp&#34;的文件,它可以正常工作。在完全相同的目录中。我很茫然。我在谷歌上看了一下,在那之前它说的字符串可能在被使用之前被破坏了,但字符串在文件打开行仍然很好。

Here是Debug手表的屏幕截图。

我可以继续我的小项目一段时间来解决这个问题,但它很烦人,所以任何帮助都会非常感激。

编辑:现在具有最小的可重现代码,并在正确的阶段调试监视。谢谢你的提示,伙计们。

2 个答案:

答案 0 :(得分:0)

调试输出显示在错误的阶段。在调试器跳过它之后,您需要查看_texFile变量。您发布的图像表明调试器尚未执行相关语句,因此您可能会误导它。

答案 1 :(得分:0)

尝试做一些简单的测试。将一些文件放在C:\file.png中,确保文件存在并检查它是否打开。您还可以尝试使用某些C ++函数检查文件是否存在,(ifstream需要绝对路径,当我按相对路径打开文件时出现类似错误)