触摸文件然后在Node中写入

时间:2014-11-17 06:37:08

标签: node.js io coffeescript touch libuv

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

尝试

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 manpage,另外为Windows实现,例如:in libuv)。这意味着:没有这样的文件或目录

3 个答案:

答案 0 :(得分:1)

为什么在调用fs.writeFile()之前尝试打开文件?这是错误的程序,可能至少导致部分问题。

你应该打电话给fs.writeFile()。这将创建文件,写入并在一次调用中关闭它。在w模式下首先打开文件可能会导致与fs.writeFile()发生冲突,因为该文件已经打开以便在其他地方写入。此外,您永远不会关闭您打开的文件,从而泄漏文件句柄。

请事先致电fs.writeFile(),不要fs.open()。这就是fs.writeFile()写作的方式。一个函数调用就可以完成所有操作。

如果您在删除ENOENT后仍然获得fs.open()并且您已清除任何孤立的文件句柄,那么剩下的问题很可能是您的路径不存在或者您没有该路径上的适当特权。

仅供参考,指定路径:

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

不会自动存在。那必须是你创造的东西。

答案 1 :(得分:0)

如何使用它? File System Exists

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

答案 2 :(得分:0)

回答原始问题

fs.writeFileSync('sporks','','utf8','a')