OkTools.NiceIO
1.0.9
See the version list below for details.
dotnet add package OkTools.NiceIO --version 1.0.9
NuGet\Install-Package OkTools.NiceIO -Version 1.0.9
<PackageReference Include="OkTools.NiceIO" Version="1.0.9" />
paket add OkTools.NiceIO --version 1.0.9
#r "nuget: OkTools.NiceIO, 1.0.9"
// Install OkTools.NiceIO as a Cake Addin #addin nuget:?package=OkTools.NiceIO&version=1.0.9 // Install OkTools.NiceIO as a Cake Tool #tool nuget:?package=OkTools.NiceIO&version=1.0.9
NiceIO
This is a fork of Lucas Meijer's NiceIO. 99.9% credit goes to Lucas for this library. I mostly just added nuget injection packaging that maintains his "just copy it into your project" design. -scott
About
For when you've had to use System.IO
one time too many.
I need to make c# juggle files & directories around a lot. It has to work on osx, linux and windows. It always hurts, and I've never enjoyed it. NiceIO is an attempt to fix that.
NiceIO is MIT Licensed.
Installation
While you can just copy NiceIO.cs directly into your project and hack at it, NiceIO is best used in its package form: add a project reference to OkTools.NiceIO.
But this is different from a typical Nuget package!! OkTools.NiceIO
injects NiceIO.cs
directly into your project.
There will be no NiceIO.dll
. Also, because NPath
is partial
, you can add whatever you want to it without being
limited to extension methods (though those of course are also fine).
You get all the benefits of a version-controlled, upstream-maintained class while still being able to directly extend it.
To get NPath
, do the following:
Add a reference to
OkTools.NiceIO
in your project.Choose the namespace you want
NPath
to be in by setting aPreprocessorValue
forNICEIO_NAMESPACE
in a projectItemGroup
. Important: if you do not configure this, you will get a build error about an unknown preprocessor value.(Optional) Decide if you want
NPath
to be public API. By default, it isinternal
, but if you want your library to publish it or use in other public API, you can setNICEIO_PUBLIC
as aDefineConstant
in a projectPropertyGroup
.(Optional) Add members directly to
NPath
by creating apartial class NPath
in your project and adding them there.
Here is an example snippet of a .csproj
that exercises the above features:
<PropertyGroup>
<DefineConstants>$(DefineConstants);NICEIO_PUBLIC</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OkTools.NiceIO" />
<PreprocessorValue Include="NICEIO_NAMESPACE" Value="My.Lovely.Namespace" Visible="false" />
</ItemGroup>
After a dotnet restore
, this project will contain a new public class My.Lovely.Namespace.NPath
.
Here's a silly example of extending NPath
in that same project:
// MyProject/NiceIO_MoreStuff.cs
namespace My.Lovely.Namespace;
partial class NPath
{
bool _someField;
public void DoSomething() => _someField = _path.Length > 10;
}
Real world usage of the above features is demonstrated at another OkTools project at Core.csproj and NiceIO_Ext.cs.
Basic Usage
//paths are immutable
NPath path1 = new NPath(@"/var/folders/something");
// /var/folders/something
//use back,forward,or trailing slashes, doesn't matter
NPath path2 = new NPath(@"/var\folders/something///");
// /var/folders/something
//semantically the same
path1 == path2;
// true
// ..'s that are not at the beginning of the path get collapsed
new NPath("/mydir/../myfile.exe");
// /myfile.exe
//build paths
path1.Combine("dir1/dir2");
// /var/folders/something/dir1/dir2
//handy accessors
NPath.HomeDirectory;
// /Users/lucas
//all operations return their destination, so they fluently daisychain
NPath myfile = NPath.HomeDirectory.CreateDirectory("mysubdir").CreateFile("myfile.txt");
// /Users/lucas/mysubdir/myfile.txt
//common operations you know and expect
myfile.Exists();
// true
//you will never again have to look up if .Extension includes the dot or not
myfile.ExtensionWithDot;
// ".txt"
//getting parent directory
NPath dir = myfile.Parent;
// /User/lucas/mysubdir
//copying files,
myfile.Copy("myfile2");
// /Users/lucas/mysubdir/myfile2
//into not-yet-existing directories
myfile.Copy("hello/myfile3");
// /Users/lucas/mysubdir/hello/myfile3
//listing files
dir.Files(recurse:true);
// { /Users/lucas/mysubdir/myfile.txt,
// /Users/lucas/mysubdir/myfile2,
// /Users/lucas/mysubdir/hello/myfile3 }
//or directories
dir.Directories();
// { /Users/lucas/mysubdir/hello }
//or both
dir.Contents(recurse:true);
// { /Users/lucas/mysubdir/myfile.txt,
// /Users/lucas/mysubdir/myfile2,
// /Users/lucas/mysubdir/hello/myfile3,
// /Users/lucas/mysubdir/hello }
//copy entire directory, and listing everything in the copy
myfile.Parent.Copy("anotherdir").Files(recurse:true);
// { /Users/lucas/anotherdir/myfile,
// /Users/lucas/anotherdir/myfile.txt,
// /Users/lucas/anotherdir/myfile2,
// /Users/lucas/anotherdir/hello/myfile3 }
//easy accessors for common operations:
string text = myfile.ReadAllText();
string[] lines = myfile.ReadAllLines();
myFile.WriteAllText("hello");
myFile.WriteAllLines(new[] { "one", "two"});
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
This package has no dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on OkTools.NiceIO:
Package | Downloads |
---|---|
OkTools.Core
These tools are ok. |
GitHub repositories
This package is not used by any popular GitHub repositories.