- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对一个 io::stdio
实例和一个包装文件的 BufReader
进行类型双关,这样我就可以在假定缓冲输入源的情况下编写代码。我已经尝试了几种尝试将 io::stdio()
转换为 BufRead
类型的变体,但都失败了,并出现了以下一种或多种变体:
error: mismatched types:
expected `std::io::stdio::StdinLock<'_>`,
found `std::io::buffered::BufReader<std::fs::File>`
(expected struct `std::io::stdio::StdinLock`,
found struct `std::io::buffered::BufReader`) [E0308]
csv_to_json.rs:26 reader = BufReader::new(file.unwrap());
代码如下:
use std::io;
use std::io::BufReader;
use std::io::prelude::*;
use std::env;
use std::process::exit;
use std::fs::File;
fn usage() {
println!("Usage: cat input.csv | csv_to_json");
}
fn main() {
let stdin = io::stdin();
let mut reader = stdin.lock(); // Assignment. (1)
let args: Vec<String> = env::args().collect();
if args.len() > 1 {
usage();
exit(1);
} else if args.len() == 1 {
let file = File::open(args[0].clone());
if !file.is_ok() {
usage();
exit(1);
}
reader = BufReader::new(file.unwrap()); // Reassignment. This is the line that fails.
}
// Rest of the code works with reader assuming a buffered input source.
}
我尝试过的事情:
let mut reader : BufRead = io::stdin(); // Fails.
let mut reader : BufReader<Read> = io::stdin(); // Fails.
let mut reader : BufReader<_> = io::stdin(); // Fails
let mut reader : BufRead = io::stdin().lock(); // Fails later.
let mut reader = BufReader::new(io::stdin()); // Fails with type mismatch.
let mut reader = BufReader::new(io::stdin().lock()); // Fails with type mismatch.
我什至尝试将该代码提取到它自己的函数中,但返回类型签名失败并出现类似的错误情况。我如何创建一个“阅读器”变量,它是 stdio
上的 BufferedReader
或 File
上的 BufferedReader
而无需到处都面临类型错误?
最佳答案
您的代码可以重写,因此无需重新分配 reader
变量(请参阅@Vladimir Matveev answer)。
如果你真的需要它,那么 reader
变量必须是 trait object :
let mut bufread;//must be defined before reader to avoid lifetime issues
let stdin = io::stdin();
let mut reader = &mut stdin.lock() as &mut BufRead; // Assignment. (1)
//...
bufread = BufReader::new(file.unwrap());//store BufReader value
reader = &mut bufread;// reassign BufRead reference
特征对象的盒装形式允许避免额外的变量bufread
:
let stdin = io::stdin();
let mut reader = Box::new(stdin.lock()) as Box<BufRead>;
//...
reader = Box::new(BufReader::new(file.unwrap()));
关于rust - 强制 io::stdio 和 BufReader 之间的 BufRead 特性兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36106280/
我正在尝试从文件中读取一些行,跳过前几行并打印其余行,但在移动后我不断收到有关已用值的错误: use std::fs::File; use std::io::{self, BufRead, BufRe
我正在尝试对一个 io::stdio 实例和一个包装文件的 BufReader 进行类型双关,这样我就可以在假定缓冲输入源的情况下编写代码。我已经尝试了几种尝试将 io::stdio() 转换为 Bu
我的应用程序使用一个非常大的文件,并从小窗口内的各种偏移量执行许多非常小的读取。我将直接文件读取替换为通过 BufReader 读取。然后我使用进程监视器(来自 Sysinternals 套件)检查了
我正在尝试创建一个函数来返回字符串在文件中的位置。这是我的代码: use std::{ fs::File, io::{BufRead, BufReader, Seek, SeekFro
为了更好地使用 Rust,我决定实现一个简单的词法分析器来逐行分析一些文档。 因为我必须在特性 BufRead 的行上至少迭代两次,所以我正在克隆我的 BufRead 的行,但我得到以下错误: err
第二次尝试访问变量sentences 导致value used here after move ,我想了解如何在不引起此问题的情况下存储总数。 我试图复制迭代器,但找不到使其工作的方法或正确的方法。
这个问题在这里已经有了答案: Why is it possible to implement Read on an immutable reference to File? (1 个回答) 关闭 6
我想打开一个文件并使用 lines() 作为 BufReader 读取其内容。我还希望能够查找到文件末尾并写入一些新行。 使用 let mut file 让我写入文件,但是一旦我将文件提供给 BufR
我的意图是访问 TcpStream 并在将 TcpStream 作为属性保存的结构的两种不同方法中执行两次读取操作。 第一个操作执行良好,但是当我尝试在第二个方法上加载剩余字节时,无法填充缓冲区。 我
BufReadCmd对于加载远程文件非常有用,例如当你:e protocol://some/file.txt 当您想设置 filetype=text 时,诀窍就来了。完成后 BufReadCmd .这
This question already has answers here: How to get the current cursor position in file? (2个答案) How t
我正在使用 fdpass crate通过 unix 套接字将文件描述符从一个进程发送到另一个进程(我不关心兼容性,只有 unix 没问题)。 使用 mio 我设法监听这些文件描述符上的事件: let
在下面的代码中创建字符串缓冲区是我发现的最快方法,因为没有完成分配重新分配如果我没理解错的话 pub extern fn rust_print_file() -> *mut PackChar {
我希望这段代码在每个循环中读取 3 个字节而不打印,但是文件的每 8000 个字节左右,它只读取两个字节: use std::error::Error; use std::fs::File; use
看完 std::io::BufReader 文档,我不确定如何最好地传递 BufReader功能之间。允许多种排列,但哪种排列最好? 我有一个接受文件的函数: use std::{fs::File,
我想从 TCPStream 中读取一行,向其中写入另一行,然后重复。问题是 BufReader::new 取得了我的 TCPStream 变量的所有权: let stream = ...; // TC
我正在尝试了解 Rust 中的一些基本内容。 我想创建一个工具,从一个文件中读取 512 个字节,并将这些字节复制到另一个文件中。然后从输入文件中取出接下来的 8 个字节并跳过它们。然后从输入文件中取
我有一个相当简单的代码,它使用 TcpStream 和 SslStream,使用 BufReader 逐行读取套接字。有时迭代器只是停止返回任何带有 Ok(0) 的数据: let mut stream
我是一个新的 vim 用户,按照本指南使 vim 自动缩进 python 代码并标记不必要的空格:https://realpython.com/blog/python/vim-and-python-a
我的 vim 配置有问题... 打开 python (.py) 文件时出现此错误: Error detected while processing BufRead Auto commands for
我是一名优秀的程序员,十分优秀!