1

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

试图

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

4

3 回答 3

1

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

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

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

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

仅供参考,由以下指定的路径:

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

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

于 2014-11-17T07:01:37.563 回答
1

回答原始问题

fs.writeFileSync('sporks','','utf8','a')
于 2020-06-03T05:22:04.020 回答
0

用这个怎么样?文件系统存在

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

于 2014-11-17T06:49:26.150 回答