我尝试以字符串的形式从用户获取输入,并将其作为Rodio播放音频文件的路径传递。当我传递给它一个硬编码的路径时,它似乎工作得很好,但是当我输入相同的路径作为输入时,它会给我一个错误。
代码:
fn main() {
let mut path = String::new();
io::stdin().read_line(&mut path); //to get input from the user
player(&path);
}fn player(path: &str){
let (stream, stream_handle) = rodio::OutputStream::try_default().unwrap();
// Load a sound from a file, using a path relative to Cargo.toml
let file = File::open(path).unwrap();
let source = rodio::Decoder::new(BufReader::new(file)).unwrap();
stream_handle.play_raw(source.convert_samples());
// The sound plays in a separate audio thread,
// so we need to keep the main thread alive while it's playing.
loop {
}
}输入: C:\Users\username\AppData\Roaming\Equinotify\songs\Olivia Rodrigo - good 4 u(官方视频).wav
输入: C:\Users\Drago\AppData\Roaming\Equinotify\songs\Olivia Rodrigo - good 4 u(官方视频).wav
这两个输入在这种情况下都不起作用,并产生以下错误:
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 123, kind: Other, message: "The filename, directory name, or volume label syntax is incorrect." }', src\main.rs:24:33然而,当我硬编码完全相同的输入时,它工作得很好。非常感谢您的帮助!
发布于 2021-06-24 08:28:27
当您从stdin读取一行时,它通常会在末尾包含新行(从按enter键时开始)。
如果您使用调试格式说明符打印字符串,即println!("{:?}",&path);,它将显示字符串中您在其他情况下看不到的任何转义序列。
您可能需要使用str::trim或类似的方法来删除换行符。-- Cormac O‘’Brien
https://stackoverflow.com/questions/68106907
复制相似问题