Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Path::join does not do what is expected

Tags:

rust

I have this Rust code:

use std::env;
use std::path::{Path, PathBuf};

fn main() {
    let user_home_dir: PathBuf = env::home_dir().expect("Could not find home directory.");
    let images_dir = Path::new(&user_home_dir).join("\\AppData\\Local\\Packages");

    println!("\nUser dir: {:?}", user_home_dir);
    println!("Image folder: {:?}", images_dir);
}

This code prints:

User dir: "C:\\Users\\username"
Image folder: "C:\\AppData\\Local\\Packages"

My expectation is that it should print:

User dir: "C:\\Users\\username"
Image folder: "C:\\Users\\username\\AppData\\Local\\Packages"

What am I doing wrong?

like image 937
Amani Avatar asked Aug 28 '26 18:08

Amani


1 Answers

Path::join uses the same semantics as PathBuf::push. Those docs say...

Pushing an absolute path replaces the existing path:

use std::path::PathBuf;

let mut path = PathBuf::from("/tmp");
path.push("/etc");
assert_eq!(path, PathBuf::from("/etc"));

\\AppData\\Local\\Packages is absolute. You have to make it relative first.

like image 200
Schwern Avatar answered Sep 01 '26 16:09

Schwern



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!