To jest to, co chciałbym robić w idealnym świecie:Czy można przewinąć kursor deskryptora pliku do nodejs?
fs.open('somepath', 'r+', function(err, fd) {
fs.write(fd, 'somedata', function(err, written, string) {
fs.rewind(fd, 0) //this doesn't exist
})
})
To moja obecna implementacja:
return async.waterfall([
function(next) {
//opening a file descriptor to write some data
return fs.open('somepath', 'w+', next)
},
function(fd, next) {
//writing the data
return fs.write(fd, 'somedata', function(err, written, string) {
return next(null, fd)
})
},
function(fd, next) {
//closing the file descriptor
return fs.close(fd, next)
},
function(next) {
//open again to reset cursor position
return fs.open('somepath', 'r', next)
}
], function(err, fd) {
//fd cursor is now at beginning of the file
})
Próbowałem zresetować pozycję bez zamykania fd
za pomocą:
fs.read(fd, new Buffer(0), 0, 0, 0, fn)
ale to powoduje, że jest to Error: Offset is out of bounds
.
Czy istnieje sposób na zresetowanie kursora bez robienia tego okropnego hack?
/e: Przesunięcie jest poza granicami błędu pochodzi z this exception. Łatwo ustalić, ustawiając rozmiar bufora na 1, ale nie przewija on kursora. Może dlatego, że prosimy o funkcję, aby nic nie czytać.
Dlaczego nie używasz argumentu "pozycja" funkcje odczytu/zapisu? –
Nie potrzebuję ich, używam [tej funkcji] (https://nodejs.org/api/fs.html#fs_fs_write_fd_data_position_encoding_callback) do zapisu, a argument "position" jest opcjonalny. Chcę tylko zapisać dane w pliku i uzyskać deskryptor pliku z kursorem na pozycji 0. – soyuka