【问题标题】:Reading imported text file to string将导入的文本文件读入字符串
【发布时间】:2015-07-30 22:59:48
【问题描述】:

我有一个正在使用虚幻引擎 4 构建的项目,我现在开始本地化字符串;我在已添加到项目源的文本文件中以 JSON 形式保存了每个本地化的所有数据。

我的解决方案资源管理器中的文件结构如下所示:

Games
    MyProject (Target)
        Source
            MyProject
                Localization
                    LOC_ES.txt
                    ...
                Accessor.h
                Accessor.cpp

我通过

将文件添加到该目录
  1. 右键单击MyProject(第二个)并单击add -> new filter
  2. 右键单击本地化过滤器并单击add -> existing item
  3. 从我的 PC 上的某个其他目录中选择所有 txt 文件。

首先我不确定这是否是向项目添加文件的正确方法。


我按照this post 中的说明进行操作,但是当我尝试运行此代码时,引擎出现此错误:

UE4Editor.exe 中 0x00007FFBF1B68B9C 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x000000C38BB2A0C0 处的 std::length_error。

这是我输入的代码。我尝试使用“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"
}

我以前从未以这种方式读取文件,所以我不确定到底是什么问题。

【问题讨论】:

  • 您是否调试过代码以查看异常实际发生的位置?
  • 我不完全确定如何使用 Visual Studio 和 Unreal Engine 做到这一点。
  • std::ifstream t的声明处设置断点。为此,请单击文本编辑器的左边框(或者将光标移动到声明并从菜单栏中选择 Debug -> Toggle Breakpoint)。然后在菜单栏中选择 Debug -> Start Debugging。
  • @TobiMcNamobi 好的,所以我确定问题出在文件路径上。如果我使用系统上文件的绝对文件路径,它可以正常工作,但我需要将文件视为资源,以便它不依赖于我系统的文件系统结构。如何将文件直接添加到项目并访问它,这样我就不必使用实际的C:\path\to\file.txt
  • 顺便说一句,西班牙语翻译不好;)

标签: c++ file-io unreal-engine4


【解决方案1】:

正如您在 cmets 中所写,问题在于文件路径。我对在 Visual Studio 中正确添加文件的建议是:

  • 首先,右键单击LOC_ES.txt 并选择删除。请注意不要从文件系统中删除文件。
  • 将相关文件复制到项目内的文件夹中。
  • 像以前一样将文件添加为现有项目,但现在选择项目文件夹中的文件。

那么您应该使用相对文件路径(取决于构建可执行文件的位置)。

【讨论】:

  • 我想通了!基本上我必须把它放在项目本身的 Content 文件夹中,因为它会被复制到二进制文件中。然后我可以使用内置的FPaths::GameDir() 来获取exe 根目录的相对路径,然后直接导航到该文件。哇哦!
【解决方案2】:

您可能为流构造函数提供了与资源文件位置不匹配的相对路径。这就是错误消息可能会说的内容:“我找不到流,所以我无法从位置 0 开始搜索。”查看可执行文件所在的构建/调试目标。然后找到从可执行文件到资源的相对路径并使用它。希望这会奏效。

我以 C++ 程序员的身份回答这个问题,但对 unreal-engine4 一无所知。资源文件(Localization/LOC_ES.txt,...)可能没有复制到生成的运行时,即可执行文件的范围。

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多