1

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

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

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

let fileHandle;

async function save() {
  let stream = await fileHandle.createWritable();
  await stream.write();
  await stream.close();
}

async function saveFile() {
  const options = {
    types: [{
      description: 'Text File',
      accept: {
        'text/plain': '.txt'
      },
    }],
    excludeAcceptAllOption: true,
  }

  try {
    fileHandle = await window.showSaveFilePicker(options);
  } catch (err) {
    return;
  }

  throw "Some error occurs, preventing the 'save' function from being reached...";

  save();
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>File System Access Test</title>
  <script type="text/javascript" src="test.js"></script>
</head>

<body>
  <button type="button" onclick="saveFile()">Save File</button>
</body>

</html>

4

2 回答 2

0

您的代码已经在运行,我只移动了最后几行,因为它们是不必要的。

我测试了您的代码,创建了一个无法在其中创建文件的文件夹

async function saveFile() {
  const options = {
    types: [{
      description: 'Text File',
      accept: {
        'text/plain': '.txt'
      },
    }],
    excludeAcceptAllOption: true,
  }

  // here i make the changes
  try {
    fileHandle = await window.showSaveFilePicker(options);
  save();

  } catch (err) {
    alert('failed')
  }

}
于 2021-11-05T16:36:16.680 回答
0

所有预防措施都可以通过验证来创建

例如,创建一个类来验证您需要满足的参数,如果验证正确,则执行保存功能。

于 2021-11-05T16:28:48.503 回答