'how do i concatenate two files in rust? [duplicate]

I have txt1.txt and txt2.txt, how do i concatenate these files into txt1.txt using rust?

use std::fs;
use std::io;
use std::io::{Read, Write};

fn main() {
    let mut txt1 = fs::OpenOptions::new()
        .read(true)
        .write(true)
        .open("txt1.txt")
        .unwrap();
    
    let mut txt2 = fs::OpenOptions::new()
        .write(true)
        .open("txt2.txt")
        .unwrap();
    
    let result = io::copy(&mut txt2.txt, &mut txt1.txt).unwrap();
    println!("final txt size = {}", result);
}


Solution 1:[1]

the below code will work for your question

use std::{fs, io};


fn main() {
    
    let mut txt1 = fs::OpenOptions::new()
        .append(true)
        .open("./txt1.txt")
        .unwrap();
    
    let mut txt2 = fs::OpenOptions::new()
        .read(true)
        .open("./txt2.txt")
        .unwrap();

    let result = io::copy(&mut txt2, &mut txt1);
    println!("Result: {:?}", result);
}

if you want get rid off unwrap() functions following code is your answer

use std::{fs, io};

fn main() -> std::io::Result<()>{
    
    let mut txt1 = fs::OpenOptions::new()
        .append(true)
        .open("./txt1.txt")?;
    
    let mut txt2 = fs::OpenOptions::new()
        .read(true)
        .open("./txt2.txt")?;

    let result = io::copy(&mut txt2, &mut txt1)?;
    println!("Result Len: {}", result);

    Ok(())
}

Solution 2:[2]

solution: add .append(true)

let mut txt1 = fs::OpenOptions::new()
        .read(true)
        .write(true)
        .append(true)
        .open("txt1.txt")
        .unwrap();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ali Mirghasemi
Solution 2 PranshuTheGamer