【发布时间】:2019-01-27 13:57:19
【问题描述】:
我想在浏览器中执行一些 C 代码(使用 Firefox 64.0 进行测试)。 C 代码将文件写入磁盘。
我已经尝试使用 emscripten 的文件系统 API 好几个小时了,但我一无所获。
我读过这个relevant question 和emscripten doc 声明相同:
- 如果您的 C/C++ 代码确实使用文件,则将自动包含文件系统支持。
这是我使用文件系统的测试代码:
#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")
在控制台中。
具体来说,我现在对此感兴趣:
- 有没有办法从浏览器内部将文件写入本地文件系统?
- 我可以通过某种方式下载创建的文件吗?
感谢您的宝贵时间。
【问题讨论】:
-
使用 JavaScript,您可以设置下载链接并启动传统文件下载。 SO 有很多与如何使用 JavaScript 相关的答案。例如,这里有一个:stackoverflow.com/questions/32562347/…
-
您不能通过 JavaScript 或 WebAssembly 将文件写入用户机器的浏览器。您可以为用户提供文件下载。您可以将数据保存在 IndexedDB 中。您可以将数据上传到服务器。但是,至少从 2019 年 1 月开始,您不能只写文件
标签: javascript fs emscripten webassembly