All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.12.0 - 2026-03-14
- Update the dependencies.
- Drop the dependency on Microsoft.Bcl.Memory from a non-.NET-Standard package version.
- #203: Add
PathIo.EnumerateFilesextension methods. Thanks to @pkazakov-dev!
1.11.0 - 2025-11-25
- #171:
AbsolutePath.Existsshould returntrueif the entity is a directory. Thanks to @cnaples79!
- A new function,
PathIo.ExistsFile(this AbsolutePath), checking for strict file existence. Thanks to @cnaples79!
1.10.0 - 2025-08-04
- Support for .NET Standard 2.0. Thanks to @seclerp!
- Fix a path parsing issue based on fuzz testing (#139). Thanks to @kant2002!
1.9.0 - 2025-06-01
PathIo.CreateDirectory,DeleteEmptyDirectory,DeleteDirectoryRecursivelyare now extension methods. Thanks to @seclerp!
- Extension methods:
PathIo.ReadAllLinesAsync,PathIo.ReadAllText,PathIo.ReadAllTextAsync,PathIo.WriteAllTextAsync,PathIo.GetFiles,PathIo.GetDirectories(the latter two for file system traversal). Thanks to @seclerp!
1.8.0 - 2025-05-31
- #87: all the path types are now
IComparable<Self>. Thanks to @alvkn! IPath<TPath>generic interface now supports aCreatemethod to create a path from its string representation. Thanks to @alvkn!- #120: a new method on paths,
ChangeExtension. Thanks to @alvkn!
- #134: path normalization fails when input has both dot folders and file extension. Thanks to @maxkatz6 and @kant2002 for a detailed report and a fix!
1.7.0 - 2025-04-18
-
A new package, TruePath.SystemIo, with adapter for
System.IOtypes.TruePath.SystemIo.PathIocontains most of the static methods from .NET'sFileandDirectorytypes as extension methods over theAbstractPath.Thanks to @kant2002!
-
A setter for
AbsolutePath.CurrentWorkingDirectory.
1.6.0 - 2024-10-06
-
Paths are now compared using a platform-specific comparer by default:
- case-sensitive on Linux,
- case-insensitive on Windows and macOS.
Thanks to @babaruh and @Kataane for working on this improvement.
Equalsmethod onAbsolutePathandLocalPaththat accepts an alternate comparer (seePlatformDefaultComparerandStrictStringComparerstatic comparers on both types). Thanks to @babaruh and @Kataane for working on this improvement.
1.5.0 - 2024-09-22
- Incorrect path normalization: last ellipsis (
...) in a path was treated as a..entry.
-
#18: update to behavior of
.Parenton relative paths.Now, it works for relative paths by either removing the last part or adding
..as necessary to lead to a parent directory.Thanks to @Kataane for help on this one.
1.4.0 - 2024-08-12
-
#16: Support Windows disk drives in the normalization algorithm.
Thanks to @Kataane.
-
More optimizations for
AbsolutePath's/operator: it will avoid the unnecessary check for absolute path. -
#85: Minor performance improvements for absolute path checking on Windows.
Thanks to @Kataane.
-
AbsolutePath::Canonicalizeto convert the path to absolute, convert to correct case on case-insensitive file systems, resolve symlinks.Thanks to @Kataane.
-
LocalPath::ResolveToCurrentDirectory: effectively calculatescurrentDirectory / this. No-op for paths that are already absolute (aside from converting to theAbsolutePathtype).Thanks to @Illusion4.
-
AbsolutePath::ReadKindto check the file system object kind (file, directory, or something else) and whether it exists at all.Thanks to @Kataane.
-
#76: a new
Temporaryclass for creating a temp file or folder.Thanks to @Illusion4.
1.3.0 - 2024-06-21
-
#39: Add
AbsolutePath::RelativeTo.Thanks to @ronimizy.
-
IPath::IsPrefixOfto check path prefixes.Thanks to @babaruh.
-
IPath::StartsWithto check if the current path starts with a specified path.Thanks to @babaruh.
-
#38: Introduce
AbsolutePath::CurrentWorkingDirectory.Thanks to @babaruh.
-
#17:
AbsolutePath::Parentshould not re-check the path's absoluteness (a performance optimization).Thanks to @ronimizy.
1.2.1 - 2024-05-25
-
#60:
PathStrings.Normalize("../../foo")is broken.Thanks to @ronimizy for report.
1.2.0 - 2024-05-05
-
New
IPathandIPath<TPath>interfaces that allow to process any paths (LocalPathandAbsolutePath) in a polymorphic way. -
#41:
GetFileNameWithoutExtensionextension method forIPath.Thanks to @Komroncube.
-
#42:
GetExtensionWithDotandGetExtensionWithoutDotextension methods forIPath.Thanks to @Komroncube and @y0ung3r.
-
#19: Optimize
PathStrings.Normalizemethod.Thanks to @BadRyuner.
-
Improve the project documentation.
1.1.0 - 2024-04-27
- #26: Publish PDB files to NuGet (in form of
.snupkgfor now). - Update and publish XML documentation with the package.
- Enable the Source Link.
- #29: add converting constructors for
LocalPathandAbsolutePath. AbsolutePathandLocalPathnow supportIEquatable<T>interface.
1.0.0 - 2024-04-21
- New types:
LocalPathfor paths that may be either absolute or relative, and stored in a normalized way;AbsolutePathfor paths that are guaranteed (checked) to be absolute;LocalPathPattern(for paths including wildcards; note this is a marker type that doesn't offer any advanced functionality over the contained string).
- New static classes:
PathStringsfor path normalization (see the type's documentation on what exactly we consider as normalization).
- Currently supported features:
- path normalization (in-memory only, no disk IO performed),
- path concatenation via
/operator, - check for absolute path (work in progress; doesn't completely work for Windows paths yet),
- get path parent,
- get the last path component's name,
- check for path prefix,
- get a relative part between two paths,
- check paths for equality (case-insensitive only, yet).
0.0.0 - 2024-04-20
This is the first published version of the package. It doesn't contain any features, and serves the purpose of kickstarting the publication system, and to be an anchor for further additions to the package.