64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
let File = {
|
|
// **`File.read(name)`**
|
|
// Read the whole file into a string variable.
|
|
//
|
|
// Return value: a string contents of the file.
|
|
// If file does not exist, an empty string is returned.
|
|
//
|
|
// Example: read a .json configuration file into a config object:
|
|
// ```javascript
|
|
// let obj = JSON.parse(File.read('settings.json'));
|
|
// ```
|
|
read: function(path) {
|
|
let n = 0; let res = ''; let buf = 'xxxxxxxxxx'; // Should be > 5
|
|
let fp = File.fopen(path, 'r');
|
|
if (fp === null) return null;
|
|
while ((n = File.fread(buf, 1, buf.length, fp)) > 0) {
|
|
res += buf.slice(0, n);
|
|
}
|
|
File.fclose(fp);
|
|
return res;
|
|
},
|
|
|
|
// **`File.remove(name)`**
|
|
// Delete file with a given name. Return value: 0
|
|
// on success, non-0 on failure.
|
|
remove: ffi('int remove(char *)'),
|
|
|
|
// **`File.rename(old, new)`**
|
|
// Rename file `old` to `new`. Return 0 on success, non-0 on failure.
|
|
rename: ffi('int rename(char *, char *)'),
|
|
|
|
// **`File.write(str, name, mode)`**
|
|
// Write string `str` into file `name`.
|
|
//
|
|
// If file does not exist, it is created. `mode` is an optional file open
|
|
// mode argument, `'w'` by default, which means that previous content is
|
|
// deleted. Set `mode` to `'a'` in order to append to the existing content.
|
|
// Return value: number of bytes written.
|
|
//
|
|
// Example - write a configuration object into a file:
|
|
// ```javascript
|
|
// File.write(JSON.stringify(obj, 'settings.json'));
|
|
// ```
|
|
write: function(str, path, oMode) {
|
|
let fp = File.fopen(path, oMode || 'w');
|
|
if (fp === null) return 0;
|
|
let off = 0; let tot = str.length;
|
|
while (off < tot) {
|
|
let len = 5; // Use light 5-byte strings for writing
|
|
if (off + len > tot) len = tot - off;
|
|
let n = File.fwrite(str.slice(off, off + len), 1, len, fp);
|
|
// if (n <= 0) break;
|
|
off += n;
|
|
}
|
|
File.fclose(fp);
|
|
return off;
|
|
},
|
|
|
|
fopen: ffi('void *fopen(char *, char *)'),
|
|
fclose: ffi('void fclose(void *)'),
|
|
fread: ffi('int fread(char *, int, int, void *)'),
|
|
fwrite: ffi('int fwrite(char *, int, int, void *)'),
|
|
};
|