Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何使用固定大小的数组下载文件?_Rust - Fatal编程技术网

Rust 如何使用固定大小的数组下载文件?

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

我想从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"
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无法处理网络文件。我错了对