Ifstream无法加载文件且无法打开

时间:2019-09-28 14:04:15

标签: c++ fstream ifstream nintendo-ds

由于我制作3ds自制程序很有趣,所以其中一些代码对您来说似乎很陌生,但它基本上是相同的,但是可以添加一些额外的代码行。我正在尝试读取一个名为about.txt的文件。单独的文件夹。当我将其放在同一文件夹中时,它就起作用了,但是我丢失了该文件,然后我的伴侣说他想要在Scratch3ds-master\assets\english\text中使用它,而不是在Scratch3ds-master\source中,但我一直在输入错误。我是堆栈溢出的新手,所以这可能是太多的代码,但这是以下代码:

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

int main()
{
    // Initialize the services
    gfxInitDefault();
    consoleInit(GFX_TOP, NULL);

    int version_major;
    int version_minor;
    int version_patch;

    version_major = 0;
    version_minor = 0;
    version_patch = 2;




    printf("This is the placeholder for Scratch3ds\n\n");

    std::ifstream about_file;
    about_file.open("../assets/english/text/about.txt");


    if (about_file.fail())
    {
        std::cerr << "file has failed to load\n";
        exit(1);
    }

1 个答案:

答案 0 :(得分:0)

可能是您正在使用devkitpro软件包。而且devkitpro团队有可能为3DS编程提供等效于NDS的“ ARGV协议”。在这种情况下,如果您使用

int main(int argc, char* argv[]);

如果argv[0]非零,则应该在argc中具有可执行文件的完整路径。

https://devkitpro.org/wiki/Homebrew_Menu可能会有帮助。

您的程序对main()应该接收什么样的参数没有先验知识,在您的问题中,您使用的是一个根本不接收任何参数的主函数。

C / C ++编程的既定标准是main()将收到一个常量C字符串数组(对于 arg uments v argv > alue)和该数组中有效条目的数量(通常为 c ount命名为argc)。如果您将原始代码替换为

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

int main(int argc, char* argv[])
{
   // Initialize the services
   // ... more code follows

然后,您可以通过测试argc > 0来判断是否收到参数,然后可以使用argv[i]来获取这些参数值。

通过自制程序开发,不太可能像典型的命令行工具那样传递诸如--force--directory=/boot之类的参数,但仍有一件事仍然有用:第一个条目argv中的,应该是正在运行的程序的完整路径。所以欢迎您尝试

std::cerr << ((argc > 0) ? argv[0] : "<no arguments>");

看看你得到什么。