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.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.
Equals
method onAbsolutePath
andLocalPath
that accepts an alternate comparer (seePlatformDefaultComparer
andStrictStringComparer
static 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
.Parent
on 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::Canonicalize
to 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 theAbsolutePath
type).Thanks to @Illusion4.
-
AbsolutePath::ReadKind
to check the file system object kind (file, directory, or something else) and whether it exists at all.Thanks to @Kataane.
-
#76: a new
Temporary
class for creating a temp file or folder.Thanks to @Illusion4.
1.3.0 - 2024-06-21
-
#39: Add
AbsolutePath::RelativeTo
.Thanks to @ronimizy.
-
IPath::IsPrefixOf
to check path prefixes.Thanks to @babaruh.
-
IPath::StartsWith
to check if the current path starts with a specified path.Thanks to @babaruh.
-
#38: Introduce
AbsolutePath::CurrentWorkingDirectory
.Thanks to @babaruh.
-
#17:
AbsolutePath::Parent
should 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
IPath
andIPath<TPath>
interfaces that allow to process any paths (LocalPath
andAbsolutePath
) in a polymorphic way. -
#41:
GetFileNameWithoutExtension
extension method forIPath
.Thanks to @Komroncube.
-
#42:
GetExtensionWithDot
andGetExtensionWithoutDot
extension methods forIPath
.Thanks to @Komroncube and @y0ung3r.
-
#19: Optimize
PathStrings.Normalize
method.Thanks to @BadRyuner.
-
Improve the project documentation.
1.1.0 - 2024-04-27
- #26: Publish PDB files to NuGet (in form of
.snupkg
for now). - Update and publish XML documentation with the package.
- Enable the Source Link.
- #29: add converting constructors for
LocalPath
andAbsolutePath
. AbsolutePath
andLocalPath
now supportIEquatable<T>
interface.
1.0.0 - 2024-04-21
- New types:
LocalPath
for paths that may be either absolute or relative, and stored in a normalized way;AbsolutePath
for 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:
PathStrings
for 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.