读取导入的文本文件到字符串

时间:2015-05-19 08:14:16

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

我有一个使用虚幻引擎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. 从我电脑上的其他目录中选择所有txt文件。
  4. 我不确定,首先,如果这是将文件添加到项目的正确方法。

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

      

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

    这是我输入的代码。我尝试使用" LOC_ES.txt"引用文本文件。和"本地化/ 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"
    }
    

    我之前从未以这种方式读过文件,所以我不确定究竟是什么问题。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

我作为一名c ++程序员回答这个问题,但对unreal-engine4没有任何了解。资源文件(Localization / LOC_ES.txt,...)可能不会复制到生成的运行时,即可执行文件的范围。