跳至主要内容

检查文件是否存在

有时我们作为开发者认为我们需要检查文件是否存在与否。大多数情况下,我们完全错了。

在 Github 上编辑
假设我们要创建一个文件夹,如果它还不存在。逻辑上来说,先验证文件夹是否存在,然后尝试创建它,对吧?错了。这将创建一个竞态条件,如果文件夹在您检查文件夹是否存在和创建文件夹之间被创建,您的程序将崩溃。相反,您应该直接创建文件夹,并尝试捕获错误,如下所示。
try {
  await Deno.mkdir("new_dir");
} catch (err) {
  if (!(err instanceof Deno.errors.AlreadyExists)) {
    throw err;
  }
}
这适用于几乎所有用例。如果您有一个特殊用例,需要您在不进行除该操作之外的文件系统操作的情况下检查文件是否存在(这非常罕见),那么您可以简单地对文件进行 lstat 并捕获错误。
try {
  await Deno.lstat("example.txt");
  console.log("exists!");
} catch (err) {
  if (!(err instanceof Deno.errors.NotFound)) {
    throw err;
  }
  console.log("not exists!");
}

使用 Deno CLI 在本地运行 此示例

deno run --allow-read --allow-write https://docs.deno.org.cn/examples/checking-file-existence.ts