我有一个二进制文件 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,字符串也能正确读取。
我不知道我在这里错过了什么。
好吧,这与 emscripten 无关。我忘记将 COPYONLY 放入 CMakeLists.txt 中的 configure_file 中。
configure_file(resources/Tetris.ch8 resources/Tetris.ch8)
更改为:
configure_file(resources/Tetris.ch8 resources/Tetris.ch8 COPYONLY)
现在正在按预期工作。