购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

7.3 打开文件

Node. js提供了fs.open(path[,flags[,mode]],callback)方法,用于异步打开文件。其中参数:flags<string>|<number>为所支持的文件系统标志,默认值是r。

mode<integer>为文件模式,其默认值是0o666(可读写)。在Windows上,只能操作写权限。

如果想同步打开文件,则使用fs.openSync(path[,flags, mode])方法。

7.3.1 文件系统标志

文件系统标志选项采用字符串时,可用以下标志。

·a:打开文件用于追加。如果文件不存在,则创建该文件。

·ax:与a相似,但如果路径已存在则失败。

·a+:打开文件用于读取和追加。如果文件不存在,则创建该文件。

·ax+:与a+相似,但如果路径已存在则失败。

·as:以同步模式打开文件用于追加。如果文件不存在,则创建该文件。

·as+:以同步模式打开文件用于读取和追加。如果文件不存在,则创建该文件。

·r:打开文件用于读取。如果文件不存在,则出现异常。

·r+:打开文件用于读取和写入。如果文件不存在,则出现异常。

·rs+:以同步模式打开文件用于读取和写入。指示操作系统绕过本地的文件系统缓存。这对于在NFS挂载上打开文件时非常有用,因为它允许跳过可能过时的本地缓存。它对I/O性能有非常实际的影响,因此除非需要,否则不建议使用此标志。这不会将fs.open()或fsPromises.open()转换为同步的阻塞调用。如果需要同步的操作,则应使用fs.openSync()之类的。

·w:打开文件用于写入。如果文件不存在则创建文件,如果文件已存在则截断文件。

·wx:与w相似,但如果路径已存在则失败。

·w+:打开文件用于读取和写入。如果文件不存在则创建文件,如果文件已存在则截断文件。

·wx+:与w+相似,但如果路径已存在则失败。

文件系统标志也可以是一个数字,参阅open(2)文档 。常用的常量定义在了fs.constants中。在Windows上,文件系统标志会被适当地转换为等效的标志,例如,O_WRONLY转换为FILE_GENERIC_WRITE, O_EXCL|O_CREAT转换为能被CreateFileW接受的CREATE_NEW。

特有的x标志可以确保路径是新创建的。在POSIX系统上,即使路径是一个符号链接且指向一个不存在的文件,它也会被视为已存在。该特有标志不一定适用于网络文件系统。

在Linux上,当以追加模式打开文件时,写入无法指定位置。内核会忽略位置参数,并始终将数据追加到文件的末尾。

如果要修改文件而不是覆盖文件,则标志模式应选为r+模式而不是默认的w模式。

某些标志的行为是特定于平台的。例如,在MacOS和Linux上使用a+标志打开目录会返回一个错误。而在Windows和FreeBSD上,则返回一个文件描述符或FileHandle。观察下面的示例。

在Windows上,使用w标志打开现存的隐藏文件(通过fs.open()、fs.writeFile()或fsPromises.open())会抛出EPERM。现存的隐藏文件可以使用r+标志打开用于写入。

调用fs.ftruncate()或fsPromises.ftruncate()可以用于重置文件的内容。

实战7.3.2实战:打开文件的例子

以下是一个打开文件的例子。

该例子用于打开当前目录下的data.txt文件。当前目录下不存在data.txt文件时,则报如下异常。

当前目录下存在data.txt文件时,则程序能正常执行完成。

本节例子可以在“fs-demo/fs-open.js”文件中找到。 NuKiNYzhoDmXjnDhYHlNxU9Xmj8rLIZKAthUAc+kZNR+OJjnAFRWOXczfJvTBHzI

点击中间区域
呼出菜单
上一章
目录
下一章
×