Rust 如何使用固定大小的数组下载文件?
我想从URL下载一个文件。下面的代码工作正常,但当我在Rust 如何使用固定大小的数组下载文件?,rust,Rust,我想从URL下载一个文件。下面的代码工作正常,但当我在循环中用[u8;4*1024]替换Vec并用读取结束时,我可以无限地读取相同的信息。我应该如何更改代码以使用固定大小的数组部分下载文件 use std::env; use std::fs::{File, OpenOptions}; use std::io::{BufRead, BufReader, BufWriter, Read, Result, Write}; //[dependencies] //reqwest = "0.8.0" ex
循环中用[u8;4*1024]
替换Vec
并用读取结束时,我可以无限地读取相同的信息。我应该如何更改代码以使用固定大小的数组部分下载文件
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(())
}
使用std::env;
使用std::fs::{File,OpenOptions};
使用std::io::{BufRead,BufReader,BufWriter,Read,Result,Write};
//[依赖关系]
//reqwest=“0.8.0”
外部板条箱;
fn main()->结果{
//所有URL都存储在作为命令行参数传递的文件中
让args:Vec=env::args().collect();
让fin=File::open(&args[1])?;
让buf:&mut-Vec=&mut-Vec::new();
让mut读取:usize;
对于BufReader::new(fin).lines()中的行{
让展开=&line.unwrap();
让mut options=OpenOptions::new();
//创建名称等于最后一个域的输出文件
设fout=选项
.写(真)
.create(true)
.open(&unwrapped[unwrapped.rfind('/').unwrap()+1..])?;
让mut writer=BufWriter::new(&fout);
readed=reqwest::get(unwrapped).unwrap().read_to_end(buf).unwrap();
println!(“{}”,readed);//只是想知道读了多少
作家。写作(buf)?;
//关闭文件并清除“buf”,以确保
//随后的读数是正确的
writer.flush()?;
buf.clear();
}
好(())
}
你看到你说的话了吗?没有意义,你在你的URL上使用read-to-end,这与你的文件无关。@Shepmaster它看起来不像io::copy
或io::SeekFrom
可以处理网络文件。我错了?@Stargateur但它几乎完全符合我的要求:我给出了URL并在我的计算机上获得了正确的文件。看起来io::copy或io::SeekFrom无法处理网络文件。我错了对