在Node.js中,有没有一种方法可以获取文件描述符或流的当前偏移量?目前,可以设置文件描述符的偏移量,但似乎没有办法获取它。
在C中,通过
运行上述程序三次,
在C中,通过
ftell
获取文件流的偏移量,通过lseek(fd, 0, SEEK_CUR)
获取文件描述符的偏移量。
示例
如果Node.js程序需要在追加模式下打开文件后检查是否存在先前的数据,则调用ftell
将有所帮助。在C中,可以按以下方式执行此操作:#include <stdio.h>
int main() {
FILE* f = fopen("test.txt", "a");
fprintf(f, ftell(f) ? "Subsequent line\n" : "First line\n");
fclose(f);
}
运行上述程序三次,
test.txt
将变成:First line
Subsequent line
Subsequent line
现有技术
- 有人在某个旧版的Node.js问题中提到了
bytesWritten
和bytesEmitted
,但两者都不等同于ftell
(在上面的C代码示例中,当打开文件时写入的字节数始终为0)。https://github.com/nodejs/node-v0.x-archive/issues/1527。 fs-ext
NPM包。该包为Node.js提供了低级别的lseek
。 https://www.npmjs.com/package/fs-ext。
ftell()
相对应的函数。通常的做法是,要么追加内容,要么使用fs.read()
或fs.write()
方法指定position
参数来进行读写操作。如果你只想按顺序写入一系列数据,那么可以使用流(stream)。当然,你也可以获取当前文件的长度,然后使用位置信息从文件末尾读取一定数量的字节,如果这正是你想做的。或者,你可以根据当前文件长度判断在以追加模式打开文件后是否位于文件的开头。 - jfriend00