Как я могу скачать файл по частям, используя массив фиксированного размера? - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу скачать файл с URL. Код ниже работает нормально, но когда я заменяю Vec на [u8; 4 * 1024] и read_to_end на read в loop, я получаю бесконечное чтение одной и той же информации. Как мне изменить мой код, чтобы загружать файл по частям, используя массив фиксированного размера?

use std::env;
use std::fs::{File, OpenOptions};
use std::io::{BufRead, BufReader, BufWriter, Read, Result, Write};

//[dependencies]
//reqwest = "0.8.0"
extern crate reqwest;

fn main() -> Result<()> {
    // All URL's are stored in file passed as a command line argument
    let args: Vec<String> = env::args().collect();
    let fin = File::open(&args[1])?;

    let buf: &mut Vec<u8> = &mut Vec::new();
    let mut readed: usize;
    for line in BufReader::new(fin).lines() {
        let unwrapped = &line.unwrap();
        let mut options = OpenOptions::new();

        // Create an output file with a name equal to the last domain
        let fout = options
            .write(true)
            .create(true)
            .open(&unwrapped[unwrapped.rfind('/').unwrap() + 1..])?;
        let mut writer = BufWriter::new(&fout);

        readed = reqwest::get(unwrapped).unwrap().read_to_end(buf).unwrap();
        println!("{}", readed); // Just to know how many read
        writer.write(buf)?;

        // Close the file and clear "buf" to ensure that
        // the subsequent reading is correct
        writer.flush()?;
        buf.clear();
    }
    Ok(())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...