如何在向文件写入之前触摸文件?
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()
? 这是错误的程序,很可能造成至少一部分的问题。
你应该直接拨打 fs.writeFile()
. 这将在一次调用中创建文件、写入文件并关闭文件。 首先在 w
模式很可能造成与 fs.writeFile()
因为该文件已经打开,可以在其他地方写入。 此外,你从来没有关闭你打开的文件,从而泄露了一个文件句柄。
只要调用 fs.writeFile()
没有 fs.open()
事先。 这就是为什么 fs.writeFile()
是写来工作的。 一个函数调用就能搞定。
如果你还是得到 ENOENT
去掉 fs.open()
并且你已经清除了任何遗弃的文件句柄,那么剩下的问题很可能是你的路径不存在或者你在该路径上没有适当的权限。
顺便说一下,由.指定的路径不会自动存在。
path.join(os.tempdir(), "cache")
指定的路径不会自动存在 那必须是你创建的东西。
那用这个呢?文件系统存在
fs.existsSync(path);
如果存在则返回true。
回答原来的问题
fs.writeFileSync('sporks','','utf8','a')