Я хочу скачать файл с 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(())
}