gpt4 book ai didi

rust - Rust-从方法中获取值(value)而无需借用(计算文件行数)

转载 作者:行者123 更新时间:2023-12-03 11:39:27 24 4
gpt4 key购买 nike

我在防 rust 方面还很新,我也不知道如何解决。
代码是:

let input = File::open(file_path)?;
let buffered = BufReader::new(input);

let line_count = buffered.lines().count();

for (nr, line) in buffered.lines().enumerate() {
print!("\rLOADED: [{}/{}]", nr, line_count);
// do something...
}
我得到的错误:
let buffered = BufReader::new(input);
-------- move occurs because `buffered` has type `std::io::BufReader<std::fs::File>`, which does not implement the `Copy` trait

let line_count = buffered.lines().count();
-------- value moved here

for (nr, line) in buffered.lines().enumerate() {
^^^^^^^^ value used here after move
请帮助,我对此感到困惑。

最佳答案

调用BufReader::new(file_handle);会消耗file_handle,调用buffered.lines()会消耗buffered。可能有一种更有效,更聪明或更优雅的方法来执行此操作,但是如果您想首先获得完整的行数,则可以打开并遍历文件两次:

use std::fs::File;
use std::io::{self, BufRead, BufReader};

fn main() -> io::Result<()> {
let file_path = "input.txt";
let input = File::open(file_path)?;
let buffered = BufReader::new(input);
let line_count = buffered.lines().count();

let input = File::open(file_path)?;
let buffered = BufReader::new(input);
for (nr, line) in buffered.lines().enumerate() {
println!("LOADED: [{}/{}]", nr, line_count);
}

Ok(())
}

关于rust - Rust-从方法中获取值(value)而无需借用(计算文件行数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62585373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com