为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Deno中写入文件?

如何在Deno中写入文件?

慕运维8079593 2022-09-02 21:23:56
我试图使用Deno.writeFileawait 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中写入文件的正确方法是什么?
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

有多种方法可以在Deno中编写文件,所有这些方法都需要标志,如果发生错误,它们都会这样做,因此您应该正确处理错误。--allow-writethrow


使用 Deno.writeFile

此 API 采用 ,而不是字符串,这是您收到该错误的原因。它还需要一个可选的 WriteFileOptions 对象Uint8Array


const 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/fs


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

// or if you want sync API

Deno.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.writeFileTextEncoder


const encoder = new TextEncoder(); // to convert a string to Uint8Array

await 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


查看完整回答
反对 回复 2022-09-02
?
大话西游666

TA贡献1817条经验 获得超14个赞

您可以使用 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 */)

此变体稍微不那么冗长,但需要一次额外的写入操作(如果不存在,则为文件创建)。


查看完整回答
反对 回复 2022-09-02
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号