首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js读取文件,如果存在则附加数据,如果不存在则创建文件

Node.js读取文件,如果存在则附加数据,如果不存在则创建文件
EN

Stack Overflow用户
提问于 2018-12-18 14:35:46
回答 3查看 6.5K关注 0票数 1

我尝试使用fs.open()。但当文件不存在时,数据就存在了。下面是我的代码:

代码语言:javascript
复制
fs.open('person.json', 'w', function (err, data) {
  if (err) throw err;
  console.log(data)
});

Console.log(数据)结果为

3

为什么会这样呢?这三个是从哪里来的?

我的目的是读取文件如果存在,并创建新的文件,如果不存在。如何在node.js中实现?

EN

回答 3

Stack Overflow用户

发布于 2018-12-18 14:45:18

  1. 听起来你要做的第一件事是调用fs.statSync(),检查文件是否存在。
  2. 如果文件存在,则调用fs.open("r")读取它。
  3. 否则,听起来像是你想创建它。fs.open("w"),正如您在上面所做的,应该可以正常工作。
  4. fs.open返回一个文件描述符。我怀疑这可能就是你所问的"3“。

附录4/24/19

从历史上看(其他语言,其他时候),使用“异常”来处理“控制流”的想法是非常可怕的。

repeatdomiau提出了一个有效的观点。文档似乎建议简单地打开文件,并处理可能出现的任何异常:

https://nodejs.org/api/fs.html

//检查当前目录下是否存在该文件,是否可写文件(fs.access,fs.constants.F_OK | fs.constants.W_OK,(err) => { if (err) { console.error( ${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'});} else { console.log(${file} exists, and it is writable);} });

不建议在调用fs.open()、fs.readFile()或fs.writeFile()之前使用fs.access()检查文件的可访问性。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应该直接打开/读/写文件,并在文件不可访问时处理引发的错误。

票数 3
EN

Stack Overflow用户

发布于 2018-12-18 16:47:17

'3‘-是一个文件描述符。https://nodejs.org/api/fs.html#fs_file_descriptors

'w' -打开要写入的文件。文件被创建(如果不存在)或被截断(如果存在)。

使用'r+' -打开文件进行读写。如果文件不存在,则会发生异常。

https://nodejs.org/api/fs.html#fs_file_system_flags

票数 2
EN

Stack Overflow用户

发布于 2019-04-23 14:54:43

你可以使用"ax“模式,意思是打开以供追加。如果该文件不存在,则会创建该文件,但会以独占模式打开该文件。或者可以使用"a+“模式表示打开以进行读取和追加。如果文件不存在,它将被创建,并且您得到的 '3‘是一个文件描述符(“在POSIX系统上,对于每个进程,内核维护一个当前打开的文件和资源的表。每个打开的文件都被分配一个简单的数字标识符,称为文件描述符。”在系统级,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件。Windows系统使用不同但概念上相似的机制来跟踪资源。为了简化用户,Node.js抽象出操作系统之间的具体差异,并为所有打开的文件分配一个数字文件描述符。fs.open()方法用于分配新的文件描述符。一旦被分配,文件描述符可用于从文件读取数据、向其写入数据或请求关于文件的信息。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53827566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档