Метод seek
Метод seek из трейта Seek перемещает курсор
ввода-вывода в потоке на позицию, заданную параметром
SeekFrom. Метод возвращает результат типа
Result<u64, Error> - при успехе это новая позиция
курсора от начала потока, при ошибке - значение ошибки.
Параметром метод принимает значение перечисления
SeekFrom, которое может быть одним из трёх вариантов:
SeekFrom::Start - смещение от начала потока,
SeekFrom::End - смещение от конца потока (может быть
отрицательным), SeekFrom::Current - смещение от текущей
позиции курсора.
Синтаксис
seek.seek(pos)
Пример
Давайте откроем файл, переместим курсор на позицию 2 от начала и прочитаем оставшееся содержимое:
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
fn main()
{
let mut file = File::open("test.txt").unwrap();
let pos = file.seek(SeekFrom::Start(2)).unwrap();
println!("{}", pos);
let mut content = String::new();
file.read_to_string(&mut content).unwrap();
println!("{}", content);
}
Результат выполнения кода:
2
"cde"
Пример
Давайте переместим курсор на 2 байта назад от конца файла и прочитаем оставшиеся байты:
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
fn main()
{
let mut file = File::open("test.txt").unwrap();
let pos = file.seek(SeekFrom::End(-2)).unwrap();
println!("{}", pos);
let mut content = String::new();
file.read_to_string(&mut content).unwrap();
println!("{}", content);
}
Результат выполнения кода:
3
"de"
Пример
Давайте переместим курсор на 1 байт вперёд от текущей позиции и прочитаем оставшееся содержимое:
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
fn main()
{
let mut file = File::open("test.txt").unwrap();
file.seek(SeekFrom::Start(1)).unwrap();
let pos = file.seek(SeekFrom::Current(1)).unwrap();
println!("{}", pos);
let mut content = String::new();
file.read_to_string(&mut content).unwrap();
println!("{}", content);
}
Результат выполнения кода:
2
"cde"
Смотрите также
-
трейт
Seek,
который предоставляет метод seek для перемещения курсора -
перечисление
SeekFrom,
которое задаёт позицию для перемещения курсора -
метод
read_to_string,
который читает всё содержимое потока в строку -
метод
flush,
который сбрасывает буферизованные данные в поток