【问题标题】:Error opening a file in C++: Error getting characters from string在 C++ 中打开文件时出错:从字符串中获取字符时出错
【发布时间】:2016-02-14 14:30:30
【问题描述】:

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

#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("c:\Programming\Viper\ViperEngine\Debug\floop.png", std::ios::in | std::ios: :binary)),但这仍然不起作用。奇怪的是,如果我在完全相同的目录中使用名为“bloop.bmp”的文件,它工作正常。我很茫然。我在谷歌上看了看,它说字符串可能在使用之前就被破坏了,但字符串在文件打开行仍然很好。

Here 是 Debug 手表的截图。

解决这个问题我可以继续我的小项目一段时间,但它非常烦人,因此非常感谢任何帮助。

编辑:现在使用最少的可重现代码,并在正确的阶段进行调试观察。感谢您的提示,伙计们。

【问题讨论】:

标签: c++ string file io


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 好吧,我用直接放在C:\\目录下的文件试了一下。还是不行。
    • 这不是问题的答案。
    猜你喜欢
    • 2020-12-31
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多