触摸文件,然后在Node中写入

在写入之前如何触摸文件?

尝试

fs = require 'fs' os = require 'os' path = require 'path' json_filepath = path.join os.tempdir(), 'cache', 'foo.json' module.exports = (cb) -> fs.open json_filepath, 'w', 438, (err) -> # Touch, also tried with node-touch return cb err if err? fs.writeFile json_filepath, {foo: 'bar'}, {}, (err) -> #console.error 'Error writing cache: ', err cb err 

错误

 { [Error: ENOENT, open '/tmp/cache/foo.json'] errno: 34, code: 'ENOENT', path: '/tmp/cache/foo.json' } 

这是一个POSIX错误( Linux手册页 ,另外为Windows实现,例如: 在libuv中 )。 这意味着: 没有这样的文件或目录

你为什么要在调用fs.writeFile()之前打开一个文件? 这是错误的过程,可能会导致至less部分的问题。

你应该只是调用fs.writeFile() 。 这将创build该文件,写入并在一次调用中closures它。 首先在w模式下打开文件可能会导致与fs.writeFile()的冲突,因为该文件已经在其他地方打开了。 此外,你永远不会closures你打开的文件,从而泄漏文件句柄。

只要事先没有fs.open()调用fs.writeFile() 。 这就是fs.writeFile()被写入工作。 一个函数调用这一切。

如果在删除fs.open()后仍然得到ENOENT ,并且清除了任何孤立的文件句柄,则剩余的问题可能是您的path不存在,或者您没有该path的适当权限。

FYI指定的path:

 path.join(os.tempdir(), "cache") 

将不会自动存在。 这将是你创造的东西。

如何使用这个? 文件系统存在

fs.existsSync(path); 如果存在,则返回true。