如何在Deno中写入文件?

我试图使用Deno.writeFile


await Deno.writeFile('./file.txt', 'some content')

但是得到了以下神秘的错误:


error: Uncaught TypeError: arr.subarray is not a function

    at Object.writeAll ($deno$/buffer.ts:212:35)

    at Object.writeFile ($deno$/write_file.ts:70:9)

在Deno中写入文件的正确方法是什么?


慕运维8079593
浏览 121回答 2
2回答

慕标琳琳

有多种方法可以在Deno中编写文件,所有这些方法都需要标志,如果发生错误,它们都会这样做,因此您应该正确处理错误。--allow-writethrow使用 Deno.writeFile此 API 采用 ,而不是字符串,这是您收到该错误的原因。它还需要一个可选的 WriteFileOptions 对象Uint8Arrayconst res = await fetch('http://example.com/image.png');const imageBytes = new Uint8Array(await res.arrayBuffer());await Deno.writeFile('./image.png', imageBytes);还有同步API(它像在Node.js中一样阻止事件循环)。Deno.writeFileSync('./image.png', imageBytes);写入字符串如果要写入文本文件并有一个字符串,最简单的方法是使用 Deno.writeTextFile 或 writeFileStr from 。std/fsawait Deno.writeTextFile('./file.txt', 'some content');// or if you want sync APIDeno.writeTextFileSync('./file.txt', 'some content');// import { writeFileStr, writeFileStrSync } from 'https://deno.land/std/fs/mod.ts'import { writeFileStr, writeFileStrSync } from 'https://deno.land/std/fs/write_file_str.ts'await writeFileStr('./file.txt', 'some content');writeFileStrSync('./file.txt', 'some content');您也可以与 一起使用。Deno.writeFileTextEncoderconst encoder = new TextEncoder(); // to convert a string to Uint8Arrayawait Deno.writeFile('./file.txt', encoder.encode('some content'));低级接口使用和(或Deno.openDeno.writeAllDeno.writeAllSync)const file = await Deno.open('./image.png', { write: true, create: true });/* ... */await Deno.writeAll(file, imageBytes);file.close(); // You need to close it!请参阅此处。如果要追加,请执行以下操作:OpenOptions{ append: true }您还可以使用更低级别的 API,例如 Deno.write 或 Writer.write

大话西游666

您可以使用 ensureDir 将文件安全地写入可能不存在的目录:import { ensureDir } from "https://deno.land/std@0.54.0/fs/ensure_dir.ts";ensureDir("./my/dir")  .then(() => Deno.writeTextFile("./my/dir/file.txt", "some content"));包含的文件目录可以通过 dirname 派生:import { dirname } from "https://deno.land/std@0.54.0/path/mod.ts";const file = "./my/dir/file.txt";ensureDir(dirname(file)).then(() => Deno.writeTextFile(file, "some content"));另一种方法是确保文件断言文件存在:import { ensureFile } from "https:deno.land/std/fs/ensure_file.ts";ensureFile(file).then(/* your file write method */)此变体稍微不那么冗长,但需要一次额外的写入操作(如果不存在,则为文件创建)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript