Rust: Как прочитать файл блок за блоком - PullRequest
1 голос
/ 21 апреля 2020

Я совершенно новый для ржавчины. Я хочу прочитать блок файла блоком / чанками (каждый блок должен содержать 16 байтов) и записать его - для этого тестового сценария - в другой файл, f2. Поэтому я попытался сначала с этим кодом:

let mut buf = [0;16];
let mut count = 0;

     for byte in f1.bytes() {

            if count  == 16 {
                do_smth(&mut f2, &mut buf);
                count = 0;
                let data = byte?;
                buf[count] = data;

            } else {
                let data = byte?;
                buf[count] = data;
                count +=1;
            }

    }

Тестовые байты в файле f1 были:

0123456789abcdef-hello world, hello world!

Результат в файле f2 был

0123456789abcdefhello world, hel

Существует ли эффективный способ увеличения курсора файла на каждой итерации. Я читал о функции поиска и немного экспериментировал с ней, но не нашел решения. Может быть, это можно решить с помощью приращения файлового курсора на каждое целое число?

1 Ответ

0 голосов
/ 23 апреля 2020

Это рабочий раствор.

let mut buffer = [0; 16];
let mut count = 0;
while let Ok(n) = f1.read(&mut buffer[..]) {
    if n != 16 {
        let rest = &buffer[0..n];
        do_smth(&mut f2, &rest);
        break;
    } else {
        do_smth(&mut f2, &mut buffer);
        count += n;
    }
}
...