
3.16 根据文件描述符写入文件内容
本节向读者介绍根据文件描述符写入文件内容的应用,可以实现偏移量写入、追加写入等增强功能。文件系统fs模块提供了fs.write()和fs.writeSync()两个方法来完成写文件的操作。
下面介绍一个通过fs.writeSync()方法以同步方式并根据文件描述符写入文件内容的代码实例。
【代码3-19】(详见源代码目录ch03-node-fs-write-sync.js.js文件)



【代码分析】
• 本例程为了测试读取文件内容的功能,在代码文件目录下新建一个“txtWrite”子目录,然后在该子目录下创建一个名称为“writeSync.txt”的文本文件。
• 第17行通过调用fs.existsSync()方法以同步方式执行判断目标文件是否存在的操作。
• 第18行代码通过调用fs.open()方法执行打开文件的操作。
• 第24~28行通过调用fs.readFileSync()方法执行读文件的操作,查看目标文件(txtWrite/writeSync.txt)中的内容。
• 第30行定义了一个Buffer类型的变量,并进行了初始化操作。初始化内容为本例程用到的fs.writeSync()方法的语法形式('fs.writeSync(fd, buffer, offset, length[, position])\n')。
• 第31行调用fs.writeSync()方法以同步方式执行写文件的操作,并将返回值保存在变量len_buf中。
• 第34行通过变量len_buf打印输出了实际写入数据的长度。
• 第36~40行再次调用fs.readFileSync()方法执行读文件的操作,查看目标文件(txtWrite/writeSync.txt)被改写后的内容。
• 第44~51行调用fs.close()方法执行关闭文件的操作。
在控制台中运行该Node程序,具体的输出内容如图3.19所示。

图3.19 根据文件描述符写入文件内容