簡體   English   中英

如何知道 Node.js 中的文件 position? - lseek 的返回值

[英]How to know file position in Node.js? - return value of lseek

讀取fs.readfs.write ,似乎在 Node.js 中沒有 C function lseek的接口直接暴露; 當前文件描述符 position 可以在任何fs.readfs.write之前通過參數position

我強烈懷疑,在低級別,參數position在讀取或寫入操作之前通過lseek調用處理,但是lseek的返回值呢?

更具體地說,要獲取 C 中的當前文件描述符 position,我可以這樣寫:

int position = lseek(fd, 0, SEEK_CUR);

Node.js 有沒有辦法獲得相同的信息?

似乎沒有“本機”方式。 大概是因為

在同一個文件上多次使用 fs.write***()而不等待回調是不安全的。

對於緩沖的 IO,使用getCurrentPosition之類的東西更是如此。 write***read***之后但在調用回調之前它應該返回什么?

但是您可以嘗試在bytesReadbytesWritten的幫助下自己跟蹤當前的 position。 如果是流,則有chunk.length ,但不要忘記字符串的編碼。


作為旁注......你寫道:

考慮新功能我認為這可能是一個有用的信息

如果沒有人要求它,而您自己不確定它可以用於什么,那么我認為練習 YAGNI 原則是一個好主意。

我強烈懷疑,在低級別,參數 position 在讀取或寫入操作之前通過 lseek 調用處理,但是 lseek 的返回值呢?

正如Ben Noordhuis (libuv 維護者)所說,它沒有在后台使用:

lseek() 對於並發讀取器或寫入器是不可預測的。 libuv 的方式是使用位置讀寫(uv_fs_read() 和 uv_fs_write() 的偏移量參數。)

本期關於 node.js GitHub談論他們如何管理 position 參數以將數據讀取和寫入文件。

Node.js 有沒有辦法獲得相同的信息?

接受的答案很好地解釋了如何做到這一點:您需要跟蹤讀取和寫入的字節。

在 Node.js 中,您可以使用fs.read()fs.write()

Node 可以通過使用_filename_dirname變量告訴您它在文件系統中的哪個位置工作。 filename 變量提供當前正在執行的文件的絕對路徑; dirname 提供正在執行的文件所在的工作目錄的絕對路徑。 兩個變量都不必從任何模塊導入,因為每個模塊都是標准提供的。

下面是一個使用這兩個變量的簡單示例:

console.log("這個文件是" +__filename ); console.log("它位於 " +__dirname );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM