如何使用FileSystem API在目录中创建文件?无需逐个创建目录句柄
解决FileSystem API创建带子目录文件的问题
你遇到的错误是因为getFileHandle的文件名参数不能包含路径分隔符(比如/),它只能处理当前目录下的文件,无法自动创建嵌套子目录。
可以通过一个工具函数自动拆分文件路径、递归创建所需子目录,最后生成目标文件,无需手动逐个处理目录句柄:
async function createFileWithPath(rootDirHandle, filePath) { // 拆分路径为目录片段和文件名 const pathSegments = filePath.split('/'); const fileName = pathSegments.pop(); let currentDirHandle = rootDirHandle; // 递归创建所有必要的子目录 for (const segment of pathSegments) { currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true }); } // 在目标目录创建文件 return await currentDirHandle.getFileHandle(fileName, { create: true }); } // 替换你原来的代码调用 const fileHandle = await createFileWithPath(this.directoryHandle, entry.filename); // 后续正常写入文件 const writable = await fileHandle.createWritable(); await writable.write(/* 你的文件内容 */); await writable.close();
代码说明:
split('/')将带路径的文件名拆分为目录片段和纯文件名,比如test/test.txt会被拆分为['test', 'test.txt'],分离出文件名后剩下的就是需要创建的目录层级。- 遍历目录片段,用
getDirectoryHandle自动创建不存在的子目录,同时更新当前操作的目录句柄。 - 最后在最终的目标目录下创建文件,得到的文件句柄可以直接用于写入操作。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

