簡體   English   中英

Rust - 從方法中獲取值而不借用(計算文件的行數)

[英]Rust - Get value from method without borrowing (count the lines of file)

我是 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(())
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM