将导入的文本文件读取为字符串
Reading imported text file to string
我有一个正在使用 Unreal Engine 4 构建的项目,现在我正在对字符串进行本地化;我将每个本地化的所有数据都以 JSON 形式保存在我添加到项目源代码的文本文件中。
我的解决方案资源管理器中的文件结构如下所示:
Games
MyProject (Target)
Source
MyProject
Localization
LOC_ES.txt
...
Accessor.h
Accessor.cpp
我通过
将文件添加到该目录
- 右键单击 MyProject(第二个)并单击
add -> new filter
- 右键单击“本地化”过滤器,然后单击
add -> existing item
- Select 我电脑上其他目录中的所有 txt 文件。
首先,我不确定这是否是将文件添加到项目的正确方法。
我按照 this post 中的说明进行操作,但是当我尝试 运行 此代码时,我从引擎中收到此错误:
First-chance exception at 0x00007FFBF1B68B9C in UE4Editor.exe: Microsoft C++ exception: std::length_error at memory location 0x000000C38BB2A0C0.
这是我输入的代码。我尝试用 "LOC_ES.txt" 和 "Localization/LOC_ES.txt" 引用文本文件,但都给我这个错误。
std::ifstream t(TCHAR_TO_UTF8(*("Localization/LOC_" + locale + ".txt")));
std::string str;
t.seekg(0, std::ios::end);
str.reserve(t.tellg());
t.seekg(0, std::ios::beg);
str.assign((std::istreambuf_iterator<char>(t)), std::istreambuf_iterator<char>());
这个文件的实际内容就是JSON。这是摘录。
{
"Single Player": "Solo Jugador",
"Multiplayer": "Multijugador",
"Options": "Opciones",
"Exit": "Dejar",
"Back": "Volver",
"Normal": "Normal",
"Hard": "Duro",
"Brutal": "Extremo"
}
我以前从来没有用这种方式读取过文件,所以我不确定到底是什么问题。
可能您为流构造函数提供的相对路径与资源文件的位置不匹配。这就是错误消息可能会说的: "I find no stream, so I can not start seeking at position 0." 查看可执行文件所在的 build/debug 目标。然后找到从可执行文件到资源的相对路径并使用它。希望这会奏效。
我作为c++程序员回答这个问题,但对unreal-engine4一无所知。资源文件 (Localization/ LOC_ES.txt, ...) 可能未复制到生成的运行时,即可执行文件的范围。
正如您在评论中所写,问题出在文件路径上。我在 Visual Studio 中正确添加文件的建议是:
- 首先,右键单击
LOC_ES.txt
并选择删除。请注意不要从文件系统中删除该文件。
- 将有问题的文件复制到项目中的文件夹中。
- 像以前一样将文件添加为现有项目,但现在选择项目文件夹中的文件。
那么你应该使用相对文件路径(取决于可执行文件的构建位置)。
我有一个正在使用 Unreal Engine 4 构建的项目,现在我正在对字符串进行本地化;我将每个本地化的所有数据都以 JSON 形式保存在我添加到项目源代码的文本文件中。
我的解决方案资源管理器中的文件结构如下所示:
Games
MyProject (Target)
Source
MyProject
Localization
LOC_ES.txt
...
Accessor.h
Accessor.cpp
我通过
将文件添加到该目录- 右键单击 MyProject(第二个)并单击
add -> new filter
- 右键单击“本地化”过滤器,然后单击
add -> existing item
- Select 我电脑上其他目录中的所有 txt 文件。
首先,我不确定这是否是将文件添加到项目的正确方法。
我按照 this post 中的说明进行操作,但是当我尝试 运行 此代码时,我从引擎中收到此错误:
First-chance exception at 0x00007FFBF1B68B9C in UE4Editor.exe: Microsoft C++ exception: std::length_error at memory location 0x000000C38BB2A0C0.
这是我输入的代码。我尝试用 "LOC_ES.txt" 和 "Localization/LOC_ES.txt" 引用文本文件,但都给我这个错误。
std::ifstream t(TCHAR_TO_UTF8(*("Localization/LOC_" + locale + ".txt")));
std::string str;
t.seekg(0, std::ios::end);
str.reserve(t.tellg());
t.seekg(0, std::ios::beg);
str.assign((std::istreambuf_iterator<char>(t)), std::istreambuf_iterator<char>());
这个文件的实际内容就是JSON。这是摘录。
{
"Single Player": "Solo Jugador",
"Multiplayer": "Multijugador",
"Options": "Opciones",
"Exit": "Dejar",
"Back": "Volver",
"Normal": "Normal",
"Hard": "Duro",
"Brutal": "Extremo"
}
我以前从来没有用这种方式读取过文件,所以我不确定到底是什么问题。
可能您为流构造函数提供的相对路径与资源文件的位置不匹配。这就是错误消息可能会说的: "I find no stream, so I can not start seeking at position 0." 查看可执行文件所在的 build/debug 目标。然后找到从可执行文件到资源的相对路径并使用它。希望这会奏效。
我作为c++程序员回答这个问题,但对unreal-engine4一无所知。资源文件 (Localization/ LOC_ES.txt, ...) 可能未复制到生成的运行时,即可执行文件的范围。
正如您在评论中所写,问题出在文件路径上。我在 Visual Studio 中正确添加文件的建议是:
- 首先,右键单击
LOC_ES.txt
并选择删除。请注意不要从文件系统中删除该文件。 - 将有问题的文件复制到项目中的文件夹中。
- 像以前一样将文件添加为现有项目,但现在选择项目文件夹中的文件。
那么你应该使用相对文件路径(取决于可执行文件的构建位置)。