API файловой системы Emscripten покрывает ваш случай с использованием IndexedDB, но вам может потребоваться добавить некоторые коды, отличные от fopen
/ write
/ fclose
.
Вот обзор API файловой системы .Он имеет четыре типа:
MEMFS
: энергозависимое хранилище в памяти.Это тип файловой системы по умолчанию, который монтируется на /
во время выполнения. NODEFS
: здесь используется файл node.js fs api, который не подходит для вашего случая. IDBFS
:При этом используется IndexedDB, и вы можете использовать его для автономного хранения. WORKERFS
: предназначен для использования внутри рабочего.
Вы можете использовать IDBFS
с собственным FS API Emscripten (хотя это API на стороне JavaScript).Вы должны смонтировать это сначала, чтобы использовать это.Вы можете достичь этого, используя FS.mkdir
, FS.mount
и FS.syncfs
.Вот грубый пример на C:
#include <emscripten.h>
int main() {
// EM_ASM is a macro to call in-line JavaScript code.
EM_ASM(
// Make a directory other than '/'
FS.mkdir('/offline');
// Then mount with IDBFS type
FS.mount(IDBFS, {}, '/offline');
// Then sync
FS.syncfs(true, function (err) {
// Error
});
);
// Use fopen / write / fclose in C here.
int off_file = fopen('/offline/any_file');
...
// Don't forget to sync to make sure you store it to IndexedDB
EM_ASM(
FS.syncfs(function (err) {
// Error
});
);
}
Вот более подробный пример из репозитория Emscripten.