rust 无法写入使用“File::open”打开的文件

yjghlzjz  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(229)

这个程序的目的是获取一个文件的模板(内容),并将其应用于目录中以}B开头的所有文件。
下面的代码在我的IDE和终端(cargo run)中编译,错误为:一个月一个月一个月一个月
错误显示在file.write_all()行的apply_template函数中。
Cargo.toml文件:

[package]
name = "insert_text"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
regex = "1.7.2"

main.rs文件(仅顶部):

fn main() {
    let template = read_template();
    apply_template(&template);
}

fn get_user_input(what_input: &str) -> String{
    println!("Please enter the Path where {} is.", what_input);
    let mut user_input = String::new();
    io::stdin().read_line(&mut user_input).expect("Not a Valid Input");
    return user_input;
}

fn read_template() -> String{
    let user_input = get_user_input("template");
    let mut path = Path::new(&user_input);
    let mut file = match fs::File::open(path) {
        Ok(file) => file,
        Err(why) => { panic!("couldn't open: {}", why)}
    };
    let mut template_content = String::new();
    match file.read_to_string(&mut template_content){
        Ok(_) => println!("Successfully read template"),
        Err(why) => {println!("Couldn't convert file to template: {}", why)},
    }
    return template_content;

}

fn apply_template(template : &str) {
    //let mut user_input = get_user_input("Folder");
    let mut path_to_folder = Path::new("C:/Users/micrs/Documents/Neuer Ordner/");
    let files = fs::read_dir(path_to_folder).unwrap();

    let re = Regex::new(r"}B.*").unwrap();
    for file in files{
        if re.is_match(&file.as_ref().unwrap().file_name().to_str().unwrap()){
            let file_path = file.unwrap().path();

            let mut file = File::open(file_path).expect("Couldn't find file");
            file.write_all(template.as_bytes()).expect("Couldn't write file");

        }
    }
    println!("Successfully changed files.")

我已经试过了
1.检查属性,它应该能够写入该文件

  1. cargo在管理控制台中运行(仍然是相同的错误)
    我怎样才能让程序写入这些文件。
6rqinv9w

6rqinv9w1#

File::open的文档中,你会看到它试图以只读模式打开文件。这不允许你写入你的文件,你正在尝试:

let mut file = File::open(file_path).expect("Couldn't find file");
file.write_all(template.as_bytes()).expect("Couldn't write file");

使用File::create,以只写模式打开文件:

let mut file = File::create(file_path).expect("Couldn't find file");
file.write_all(template.as_bytes()).expect("Couldn't write file");

相关问题