问题标签 [file-system-access-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
75 浏览

javascript - 发生错误时如何防止文件系统访问 API 保存文件?

使用文件系统访问 API 保存文件时,如果在写入和保存新文件之间发生错误,仍会创建并保存文件。

有没有办法防止这个文件被创建和保存?

作为使用以下代码的示例,在运行 save 函数之前会引发错误。此错误会阻止保存功能运行;但是,仍然会创建一个文件。

0 投票
1 回答
112 浏览

javascript - 有没有办法使用文件系统访问 API 以编程方式设置默认目录

有没有办法以编程方式设置定义的目录路径,而不是使用 .showDirectoryPicker() 显示文件资源管理器以供用户选择实际路径?

0 投票
1 回答
120 浏览

javascript - 使用文件系统访问 API (javascript) 重命名/移动文件

我一直在关注这篇文章,以允许用户(半)自动将客户端生成的 XML 文件保存到特定的本地文件夹。第三方程序正在监视此文件夹并将处理其内容并在另一个文件中输出内容。

问题是从创建文件到使用 close() 方法将内容实际写入文件需要大约 250 毫秒。

有时第三方程序会检测到文件已创建,并在写入之前尝试读取其内容。该程序不支持在尝试读取文件内容之前添加延迟。

我已经考虑将文件写入临时位置并在关闭后将其移动,但这似乎不适用于此 API。重命名文件也是如此。

使用普通对话框创建/下载文件可能会起作用,但这需要使用文件系统访问 API 可以避免的手动步骤。

另一种解决方案是安装一个本地程序,该程序可以在关闭时将文件从临时文件夹移动到程序监视文件夹,但我宁愿避免在客户端上安装软件。

有没有其他方法可以避免这个问题?

谢谢

0 投票
1 回答
39 浏览

native-file-system-api-js - 使用`window.showDirectoryPicker()`时如何避免两个连续警报(一个用于读取,一个用于编辑)

我在 chrome 中使用文件系统访问 API。我想让用户选择一个文件夹,然后写入该文件夹。

我的代码有效,但按顺序显示了两个警报,一个用于读取,一个用于写入: 在此处输入图像描述 在此处输入图像描述

第一个是不必要的。我怎样才能避免它?

有趣的是,如果用户使用拖放,在文件夹被删除后只会出现第二个警报,这是期望的行为。第一个警报似乎来自showDirectoryPicker。在理想的世界中,我想能够传递一个像showDirectoryPicker({ permission: 'readwrite' }).

0 投票
1 回答
37 浏览

javascript - 在 Chrome 扩展中保留 FileSystemDirectoryHandle 对象

我正在开发 Chrome 扩展程序。在弹出窗口中我可以运行window.showDirectoryPicker(),它返回类型的对象FileSystemDirectoryHandle

我的问题是,在浏览器弹出窗口中更改选项卡后会自动关闭,因此对象被销毁。

我的问题是:有没有办法将此对象传递给任何其他上下文(例如,ServiceWorker 或其他窗口)?

或者,如果不可能,有没有办法在扩展的 ServiceWorker 中调用 window.showDirectoryPicker() ?

0 投票
0 回答
33 浏览

chromium - 在 Chromium Embedded Framework 中使用文件系统访问 API

我的程序使用 CEF(Chromium Embedded Framework)来实现一个简单的浏览器组件。我想使用 CEF 中的文件系统访问 API 来读取和写入本地文件,但是会出现一些问题。https://mburakerman.github.io/file-system-access-api-demo/是我用来试验文件系统访问 API 的测试页面。我一开始用的是Chrome,Chrome表现不错,读写本地文件正常。然后我编译了CEF(版本为96)项目并使用cefclient测试了CEF是否也能正常工作但不能。CEF 可以正确读取本地文件,但是当我单击“保存更改”按钮时没有响应,并且它也无法写入我之前选择的本地文件。之后我运行了 Chromium 和 CEF 的源代码来比较文件系统访问 API 的差异。当我要编写本地文件时,Chromium 和 CEF 的代码跑到了下图所示的相同位置。Chromium 和 CEF 在写本地文件时跑到同一个位置他们都进入了 DoRequestPermission 函数。Chromium 的 current_status 是“ASK”但 CEF 是“DENIED”,这很奇怪。CEF 中的 current_status 值然后我检查了堆栈,它显示文件的状态在消息发送时已初始化,我找不到初始化状态的位置。使用文件系统访问 API 时的 CEF 堆栈在 此处输入图像描述我想知道为什么 Chromium 中的状态是“ASK”。它是否使用某些特定的命令行或其他方法?

0 投票
1 回答
27 浏览

javascript - 检查应用重新加载后目录是否仍然存在

我正在将FileSystemDirectoryHandle保存到 IndexedDB,以便 Web 应用程序可以在下次启动时重用它。这通常工作正常。但是,当目录同时从磁盘中删除时,应用程序仍然尝试使用它(例如,尝试通过 获取目录内的文件句柄directoryHandle.getFileHandle()),就会抛出错误,这并不奇怪:NotFoundError: A requested file or directory could not be found at the time an operation was processed.

如何在对其进行任何其他操作之前检查目录是否仍然存在?在 Node.js 中,有用于检查目录是否存在的函数,例如fs.accessfs.existsSync。但是我没有发现文件系统访问 API 有类似的东西。