gpt4 book ai didi

rust - 在 bufreader.lines() 循环后不能使用移动的 BufReader

转载 作者:行者123 更新时间:2023-11-29 07:49:30 24 4
gpt4 key购买 nike

我正在尝试从文件中读取一些行,跳过前几行并打印其余行,但在移动后我不断收到有关已用值的错误:

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

fn skip_and_print_file(skip: &usize, path: &Path) {
let mut skip: usize = *skip;

if let Ok(file) = File::open(path) {
let mut buffer = BufReader::new(file);
for (index, line) in buffer.lines().enumerate() {
if index >= skip {
break;
}
}
print_to_stdout(&mut buffer);
}
}

fn print_to_stdout(mut input: &mut Read) {
let mut stdout = io::stdout();
io::copy(&mut input, &mut stdout);
}

fn main() {}

这是我遇到的错误:

error[E0382]: use of moved value: `buffer`
--> src/main.rs:15:30
|
10 | for (index, line) in buffer.lines().enumerate() {
| ------ value moved here
...
15 | print_to_stdout(&mut buffer);
| ^^^^^^ value used here after move
|
= note: move occurs because `buffer` has type `std::io::BufReader<std::fs::File>`, which does not implement the `Copy` trait

最佳答案

为了避免移动,使用Read::by_ref() method .这样,您只需借用 BufReader:

for (index, line) in buffer.by_ref().lines().enumerate() { ... }
// ^^^^^^^^^
// you can still use `buffer` here

关于rust - 在 bufreader.lines() 循环后不能使用移动的 BufReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935158/

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