c++ - Ifstream 无法加载文件并且无法打开
问题描述
由于我制作 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);
}
解决方案
您可能正在使用 devkitpro 软件包。devkitpro 团队很有可能为 3DS 编程提供了与 NDS 'ARGV 协议'相当的东西。在这种情况下,如果您使用
int main(int argc, char* argv[]);
argv[0]
如果argc
非零,您应该拥有可执行文件的完整路径。
https://devkitpro.org/wiki/Homebrew_Menu可能会有所帮助。
您的程序没有关于main()
应该接收哪种参数的先验知识,并且在您的问题中,您正在使用一个根本不接收任何参数的 main 函数。
C/C++ 编程的既定标准是main()
接收常量 C 字符串数组(通常以argv
参数值命名)和该数组中有效条目的数量(通常以argc
计数命名)。如果您将原始代码替换为
#include <fstream>
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
// Initialize the services
// ... more code follows
然后您就可以通过测试判断您是否收到了参数,argc > 0
并且您可以使用argv[i]
.
使用 homebrew 开发,您不太可能在典型的命令行工具上传递诸如--force
或--directory=/boot
as 之类的参数,但有一点仍然有用:第一个入口argv
应该是正在运行的程序的完整路径。所以欢迎你尝试
std::cerr << ((argc > 0) ? argv[0] : "<no arguments>");
看看你得到了什么。
推荐阅读
- django - 如何在我的用户页面(HTML)中创建 django Admin 的 url
- html - 我在使用 3 个 DIV 标签以连续放置 3 个块时遇到问题
- javascript - 运行项目时遇到 npm 问题
- alteryx - Alteryx 如何以分散的方式部署数据?
- javascript - 使用 javascript 对象创建 highchart 饼图
- php - 在 laravel 视图中显示 .txt 文件
- apache - 运行 apache 的 Docker 容器总是暴露端口 80
- wso2 - 在 wso2 中处理多个 IdP
- tensorflow - 模块“tensorflow”没有属性“GPUOptions”
- pgadmin - 是否有一个 COPY 命令等效于在 pgAdmin 中取消选择其值是默认值的列?