Тип SeekFrom
Тип SeekFrom представляет собой перечисление
(enum), которое используется методом seek
для указания точки отсчёта при перемещении курсора
в потоке ввода-вывода. Он содержит три варианта:
Start - отсчёт от начала потока,
End - отсчёт от конца потока и
Current - отсчёт от текущей позиции.
Каждый вариант принимает значение типа i64,
которое задаёт смещение относительно выбранной точки.
Синтаксис
enum SeekFrom
{
Start(u64),
End(i64),
Current(i64),
}
Пример
Давайте откроем файл, переместим курсор
в позицию 5 от начала с помощью SeekFrom::Start
и прочитаем содержимое:
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
fn main()
{
let mut file = File::open("test.txt").unwrap();
file.seek(SeekFrom::Start(5)).unwrap();
let mut buffer = String::new();
file.read_to_string(&mut buffer).unwrap();
println!("{}", buffer);
}
Результат выполнения кода:
"fghij"
Пример
Давайте переместим курсор на 3 байта
от конца файла с помощью SeekFrom::End
и прочитаем оставшиеся данные:
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
fn main()
{
let mut file = File::open("test.txt").unwrap();
file.seek(SeekFrom::End(-3)).unwrap();
let mut buffer = String::new();
file.read_to_string(&mut buffer).unwrap();
println!("{}", buffer);
}
Результат выполнения кода:
"hij"
Пример
Давайте переместим курсор вперёд на 2 байта
от текущей позиции с помощью SeekFrom::Current:
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
fn main()
{
let mut file = File::open("test.txt").unwrap();
file.seek(SeekFrom::Start(2)).unwrap();
file.seek(SeekFrom::Current(2)).unwrap();
let mut buffer = String::new();
file.read_to_string(&mut buffer).unwrap();
println!("{}", buffer);
}
Результат выполнения кода:
"efghij"
Смотрите также
-
тип
Seek,
который представляет трейт для перемещения курсора в потоке -
метод
seek,
который перемещает курсор в указанную позицию -
метод
read_to_string,
который читает всё содержимое в строку -
метод
read,
который читает данные в буфер