使用 emscripten 预加载二进制文件无法按预期工作

问题描述 投票:0回答:1

我有一个二进制文件 Tetris.ch8,大小为 494 字节。我正在尝试从我的 emscripten 项目中打开该文件。我使用 --preload-file 来加载文件。当我尝试打开文件并读取内容时,仅存在 21 个字节。

void Emulator::LoadROM(char* filename) {
  std::ifstream fs(filename, std::ios::binary);
  std::stringstream buf;
  buf << fs.rdbuf();
  std::cout << buf.str() << buf.str().length() << std::endl;
  return;
}

这是我尝试过的方法之一。它打印随机字符和 21 作为长度。我还尝试了 std::filesystem::file_size、ftell 等来尝试获取大小。全部都打印21。

但是当我单独尝试时,不使用emscripten,使用mingw g++,文件大小打印为494(预期)

#include <fstream>
#include <iostream>
#include <sstream>
int main() {
  char filename[] = "resources/Tetris.ch8";
  std::ifstream fs(filename, std::ios::binary);
  std::stringstream buf;
  buf << fs.rdbuf();
  std::cout << buf.str() << buf.str().length() << std::endl;
  return 0;
}

这工作正常。

为什么相同的代码在 emscripten 中表现不同?

我用非二进制文件尝试过,我将Tetris.ch8的内容更改为“Hello”。这在 emscripten 中运行良好。长度为 7,字符串也能正确读取。

我不知道我在这里错过了什么。

c++ file-io webassembly emscripten
1个回答
0
投票

好吧,这与 emscripten 无关。我忘记将 COPYONLY 放入 CMakeLists.txt 中的 configure_file 中。

configure_file(resources/Tetris.ch8 resources/Tetris.ch8)

更改为:

configure_file(resources/Tetris.ch8 resources/Tetris.ch8 COPYONLY)

现在正在按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.