我有一些C代码想在浏览器中执行(使用Firefox 64.0进行测试)。 C代码将文件写入磁盘。
许多小时以来,我一直在尝试使用emscripten的File System API,但我一无所获。
我已经阅读过此relevant question,并且emscripten doc声明相同:
这是我使用文件系统的测试代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *f = fopen("testfile.txt", "w");
if (f == NULL) {
printf("Error opening file!\n");
exit(1);
}
const char *text = "This is my test string";
int i = 1234;
fprintf(f, "Some text: %s; and an int: %d\n", text, i);
fclose(f);
printf("End of file.\n");
}
在我用以下代码编译此代码之后:
emcc test.c -o test.html
然后使用Firefox打开它,最初我希望将文件保存到我的机器上。 (我没有JS背景。) 我现在几乎可以肯定它不能那样工作。
该文件可以通过以下方式以Uint8Array的形式访问:
var array = FS.readfile("testfile.txt")
在控制台中。
具体地说,我现在对此感兴趣:
谢谢您的时间。
答案 0 :(得分:1)
TLDR; 别指望您可以在浏览器中的计算机上编写任何内容。
现代网络浏览器在设计时考虑到安全性,因此高度沙盒化。他们绝不会允许网页在您的计算机上写入/打开本地文件。假设有人访问您的网站,然后在他们的计算机中创建了一个名为testfile.txt
的文件,并且每次您按下刷新按钮时,网站都会不断创建文件。
WebAssembly也不例外。它只是一个虚拟机,可以运行用Java语言以外的语言编写的代码。请记住,WebAssembly由JavaScript引擎运行。所以说“我没有JS背景”。只是一个无效的陈述。 JS不能做的是WebAssembly不能做的。
根据Emscripten File System Overview文档,您创建的文件将保留在内存中。您必须将其转换为Blob(必须使用JavaScript API才能完成)以允许用户下载。