1

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);
}

2 Answers2

0

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(())
}
Ali Mirghasemi
  • 324
  • 1
  • 6
-1

solution: add .append(true)

let mut txt1 = fs::OpenOptions::new()
        .read(true)
        .write(true)
        .append(true)
        .open("txt1.txt")
        .unwrap();
  • `write(true)` is useless (`append` overwrites it), and `read(true)` doesn't seem very useful if the goal is just to write to it. – Masklinn Mar 28 '22 at 13:47
  • The addition of `.append(true)` has already been covered in the existing answer. – tjheslin1 Mar 28 '22 at 16:02