【问题标题】:Touch file then write to it in Node触摸文件,然后在节点中写入
【发布时间】:2015-01-14 00:33:13
【问题描述】:

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

尝试

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)。这意味着:没有这样的文件或目录

【问题讨论】:

    标签: node.js io coffeescript touch libuv


    【解决方案1】:

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

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

    只需致电fs.writeFile(),而无需事先致电fs.open()。这就是fs.writeFile() 的编写方式。一个函数调用即可完成所有工作。

    如果您在删除 fs.open() 后仍然得到 ENOENT 并且您已经清除了所有孤立的文件句柄,那么剩下的问题可能是您的路径不存在或者您没有相应的权限路径。

    仅供参考,路径由:

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

    不会自动存在。那一定是你创造的东西。

    【讨论】:

      【解决方案2】:

      回答原始问题

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

      【讨论】:

        【解决方案3】:

        用这个怎么样? File System Exists

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

        【讨论】:

        • 我的代码的另一部分有这个。如果缓存存在,则使用它,否则会发生一堆东西填充内容以填充缓存。这是我展示的测试用例。
        • 问题:是否存在tmp 文件夹或cache 文件夹?
        • 是的,那个文件夹确实存在
        • 你检查过那个文件夹的权限了吗?
        • 注意比赛条件。
        猜你喜欢
        • 2021-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多