Есть ли в Node.js способ получить текущее смещение файлового дескриптора или потока? В настоящее время можно установить смещение файлового дескриптора, но кажется, нет никакого способа получить это.
В 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
предшествующий уровень техники
- Проблема GitHub зарегистрирована для старой версии node. В обсуждении упоминаются
bytesWritten
иbytesEmitted
, ни один из которых не эквивалентенftell
(в приведенном выше примере C байты, записанные при первом открытии файла, всегда равны 0). https://github.com/nodejs/node-v0.x-archive/issues/1527. - Пакет
fs-ext
NPM. Предоставляет низкоуровневыйlseek
для использования в Node.js. https://www.npmjs.com/package/fs-ext.
ftell()
. Общая идея заключается в том, что вы либо добавляете, либо указываете аргументposition
с помощьюfs.read()
илиfs.write()
. Если вы хотите просто последовательно записать кучу данных, вы используете поток. Вы можете, конечно, получить текущую длину файла, а затем использовать position для чтения некоторого количества байтов с конца файла, если это то, что вы действительно пытаетесь сделать. Или просто используйте текущую длину файла, чтобы узнать, находитесь ли вы в начале файла после его открытия для добавления. - person jfriend00   schedule 15.02.2020