在fs.read和fs.write处阅读时,似乎在Node.js中没有直接暴露出与“ C”函数lseek的接口;可以通过参数fs.read
在任何fs.write
或position
之前更改当前文件描述符的位置。
我强烈怀疑,在较低级别上,参数position
是在读或写操作之前通过lseek
调用处理的,但是'lseek'的返回值呢?
更具体地说,要获取当前文件描述符位置,可以在“ C”中编写:
int position = lseek(fd, 0, SEEK_CUR);
Node.js中是否可以获取相同的信息?
答案 0 :(得分:4)
似乎没有“本机”的方式。可能是因为
在同一文件上多次使用fs.write ***()不等待进行回调是不安全的。
对于{strong>缓冲 IO,使用write***
之类的东西更是如此。在read***
或chunk.length
之后但在调用回调之前应该返回什么?
但是您可以尝试在bytesRead
和bytesWritten
的帮助下自己跟踪当前位置。并且在流的情况下有SELECT col1,col2,col3,col4 from Table where col1 in ('val1','val2','val3','val4')
,但在字符串的情况下请不要忘记编码。
作为旁注...您写道:
考虑新功能,我认为这可能是有用的信息
如果没有人要求它,而您自己不确定它可以用作什么,那么我认为行使YAGNI原则是个好主意。
答案 1 :(得分:1)
我强烈怀疑,在底层,参数位置是在读写操作之前通过lseek调用处理的,但是lseek的返回值呢?
Ben Noordhuis(libuv维护者)说,它不是在引擎盖下使用的:
lseek()是不可预测的 并发的读者或作家。 libuv的方法是使用位置 读取和写入(uv_fs_read()的offset参数和 uv_fs_write()。)
This issue on node.js GitHub讨论他们如何管理position参数以将数据读写到文件中。
Node.js中是否有一种获取相同信息的方法?
The accepted answer很好地解释了如何做到这一点:您需要跟踪读取和写入的字节。
答案 2 :(得分:-1)
在Node.js中,您可以使用fs.read()
和fs.write()
。
节点可以通过使用_filename
和_dirname
变量来告诉您它在文件系统中的哪个位置工作。 filename变量提供了当前正在执行的文件的绝对路径。 dirname提供了到正在执行文件的工作目录的绝对路径。无需从任何模块导入任何变量,因为每个模块都是标准提供的。
使用两个变量的简单示例如下:
console.log(“此文件为” +__filename
);
console.log(“它位于“ +__dirname
);