19

Deno TypeScript 运行时具有内置函数,但它们都没有解决检查文件或目录是否存在的问题。如何检查文件或目录是否存在?

4

4 回答 4

14

这里有标准库实现:https ://deno.land/std/fs/mod.ts

import {existsSync} from "https://deno.land/std/fs/mod.ts";

const pathFound = existsSync(filePath)
console.log(pathFound)

true如果路径存在,则此代码将打印,false如果不存在。

这是异步实现:

import {exists} from "https://deno.land/std/fs/mod.ts"

exists(filePath).then((result : boolean) => console.log(result))

确保使用不稳定标志运行 deno 并授予对该文件的访问权限:

deno run --unstable  --allow-read={filePath} index.ts
于 2020-08-10T19:08:10.883 回答
11

自 Deno 发布以来,Deno API 发生了变化1.0.0。如果找不到文件,则引发的异常是Deno.errors.NotFound

const exists = async (filename: string): Promise<boolean> => {
  try {
    await Deno.stat(filename);
    // successful, file or directory must exist
    return true;
  } catch (error) {
    if (error instanceof Deno.errors.NotFound) {
      // file or directory does not exist
      return false;
    } else {
      // unexpected error, maybe permissions, pass it along
      throw error;
    }
  }
};

exists("test.ts").then(result =>
  console.log("does it exist?", result)); // true

exists("not-exist").then(result =>
  console.log("does it exist?", result)); // false

由于原始答案帐户已暂停并且如果我对其发表评论无法更改他的答案,我正在重新发布一个固定的代码片段。

于 2020-05-18T11:40:59.637 回答
3

exists函数实际上是 std/fs 模块的一部分,尽管它目前被标记为不稳定。这意味着您需要deno run --unstablehttps ://deno.land/std/fs/README.md#exists

于 2020-05-26T07:21:12.473 回答
2

没有专门用于检查文件或目录是否存在Deno.stat函数,但返回有关路径的元数据的函数可用于此目的,方法是检查Deno.ErrorKind.NotFound.

const exists = async (filename: string): Promise<boolean> => {
  try {
    await Deno.stat(filename);
    // successful, file or directory must exist
    return true;
  } catch (error) {
    if (error && error.kind === Deno.ErrorKind.NotFound) {
      // file or directory does not exist
      return false;
    } else {
      // unexpected error, maybe permissions, pass it along
      throw error;
    }
  }
};

exists("test.ts").then(result =>
  console.log("does it exist?", result)); // true

exists("not-exist").then(result =>
  console.log("does it exist?", result)); // false
于 2019-07-25T16:21:10.337 回答