我尝试使用fs.open()。但当文件不存在时,数据就存在了。下面是我的代码:
fs.open('person.json', 'w', function (err, data) {
if (err) throw err;
console.log(data)
});
Console.log(数据)结果为
3
为什么会这样呢?这三个是从哪里来的?
我的目的是读取文件如果存在,并创建新的文件,如果不存在。如何在node.js中实现?
发布于 2018-12-18 14:45:18
附录4/24/19
从历史上看(其他语言,其他时候),使用“异常”来处理“控制流”的想法是非常可怕的。
但repeatdomiau提出了一个有效的观点。文档似乎建议简单地打开文件,并处理可能出现的任何异常:
//检查当前目录下是否存在该文件,是否可写文件(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()
检查文件的可访问性。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应该直接打开/读/写文件,并在文件不可访问时处理引发的错误。
发布于 2018-12-18 16:47:17
'3‘-是一个文件描述符。https://nodejs.org/api/fs.html#fs_file_descriptors
'w' -打开要写入的文件。文件被创建(如果不存在)或被截断(如果存在)。
使用'r+' -打开文件进行读写。如果文件不存在,则会发生异常。
发布于 2019-04-23 14:54:43
你可以使用"ax“模式,意思是打开以供追加。如果该文件不存在,则会创建该文件,但会以独占模式打开该文件。或者可以使用"a+“模式表示打开以进行读取和追加。如果文件不存在,它将被创建,并且您得到的 '3‘是一个文件描述符(“在POSIX系统上,对于每个进程,内核维护一个当前打开的文件和资源的表。每个打开的文件都被分配一个简单的数字标识符,称为文件描述符。”在系统级,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件。Windows系统使用不同但概念上相似的机制来跟踪资源。为了简化用户,Node.js抽象出操作系统之间的具体差异,并为所有打开的文件分配一个数字文件描述符。fs.open()方法用于分配新的文件描述符。一旦被分配,文件描述符可用于从文件读取数据、向其写入数据或请求关于文件的信息。)
https://stackoverflow.com/questions/53827566
复制相似问题