#canonicalize #windows #realpath #unc #deunc

dunce

Normalize Windows paths to the most compatible format, avoiding UNC where possible

4 releases (stable)

1.0.3 Oct 6, 2022
1.0.2 Jun 8, 2021
1.0.1 Jun 2, 2020
1.0.0 Mar 14, 2019
0.1.0 Nov 22, 2017

#15 in Filesystem

Download history 68290/week @ 2022-12-04 63813/week @ 2022-12-11 61559/week @ 2022-12-18 42455/week @ 2022-12-25 58881/week @ 2023-01-01 77950/week @ 2023-01-08 84333/week @ 2023-01-15 88227/week @ 2023-01-22 94208/week @ 2023-01-29 85884/week @ 2023-02-05 91818/week @ 2023-02-12 84738/week @ 2023-02-19 88796/week @ 2023-02-26 86832/week @ 2023-03-05 94352/week @ 2023-03-12 98813/week @ 2023-03-19

378,211 downloads per month
Used in 1,095 crates (142 directly)

CC0-1.0 OR MIT-0

14KB
269 lines

Dunce (de-UNC)

In Windows the regular paths (C:\foo) are supported by all programs, but have lots of bizarre restrictions for backwards compatibility with MS-DOS. There are also Windows NT UNC paths (\\?\C:\foo), which are more robust and with fewer gotchas, but are rarely supported by Windows programs. Even Microsoft's own!

This crate converts Windows UNC paths to the MS-DOS-compatible format whenever possible, but leaves UNC paths as-is when they can't be unambiguously expressed in a simpler way. This allows legacy programs to access all paths they can possibly access, and doesn't break any paths for UNC-aware programs.

In Rust the worst UNC offender is the fs::canonicalize() function. This crate provides a drop-in replacement for it that returns paths you'd expect.

On non-Windows platforms these functions leave paths unmodified, so it's safe to use them unconditionally for all platforms.


lib.rs:

Filesystem paths in Windows are a total mess. This crate normalizes paths to the most compatible (but still correct) format, so that you don't have to worry about the mess.

In Windows the regular/legacy paths (C:\foo) are supported by all programs, but have lots of bizarre restrictions for backwards compatibility with MS-DOS.

And there are Windows NT UNC paths (\\?\C:\foo), which are more robust and with fewer gotchas, but are rarely supported by Windows programs. Even Microsoft's own!

This crate converts paths to legacy format whenever possible, but leaves UNC paths as-is when they can't be unambiguously expressed in a simpler way. This allows legacy programs to access all paths they can possibly access, and UNC-aware programs to access all paths.

On non-Windows platforms these functions leave paths unmodified, so it's safe to use them unconditionally for all platforms.

Parsing is based on https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx

Project homepage.

No runtime deps