The FileSystemHandle interface of the File System API is an object which represents a file or directory entry. Multiple handles can represent the same entry. For the most part you do not work with FileSystemHandle directly but rather its child interfaces FileSystemFileHandle and FileSystemDirectoryHandle.
Below is a list of interfaces based on the FileSystemHandle interface.
FileSystemFileHandle -
Represents a handle to a file entry.
FileSystemDirectoryHandle -
Provides a handle to a directory entry.
The below code allows the user to choose a file from the file picker and then tests to see whether the handle returned is a file or directory
let fileHandle;
async function getFile() {
[fileHandle] = await window.showOpenFilePicker();
if (fileHandle.kind === "file") {
} else if (fileHandle.kind === "directory") {
}
}
The following asynchronous function returns true if user has granted read or readwrite permissions to the file handle. Permission is requested if not.
async function verifyPermission(fileHandle, withWrite) {
const opts = {};
if (withWrite) {
opts.mode = "readwrite";
}
if ((await fileHandle.queryPermission(opts)) === "granted") {
return true;
}
if ((await fileHandle.requestPermission(opts)) === "granted") {
return true;
}
return false;
}
The following function compares a single entry with an array of entries, and returns a new array with any matching entries removed.
function removeMatches(fileEntry, entriesArr) {
const newArr = entriesArr.filter((entry) => !fileEntry.isSameEntry(entry));
return newArr;
}