Chessar.LongPaths
1.0.0-rc003
See the version list below for details.
dotnet add package Chessar.LongPaths --version 1.0.0-rc003
NuGet\Install-Package Chessar.LongPaths -Version 1.0.0-rc003
<PackageReference Include="Chessar.LongPaths" Version="1.0.0-rc003" />
paket add Chessar.LongPaths --version 1.0.0-rc003
#r "nuget: Chessar.LongPaths, 1.0.0-rc003"
// Install Chessar.LongPaths as a Cake Addin #addin nuget:?package=Chessar.LongPaths&version=1.0.0-rc003&prerelease // Install Chessar.LongPaths as a Cake Tool #tool nuget:?package=Chessar.LongPaths&version=1.0.0-rc003&prerelease
Chessar.LongPaths
Chessar.LongPaths is a .NET library that allows you to enable long path support for the main System.IO
classes:
FileStream
, File
, FileInfo
, Directory
, DirectoryInfo
, ...
(and others, for example Image.FromFile
).
The library is based on replacing the internal NormalizePath
and GetFullPathInternal
functions from the static Path
class. The replacement is done using JMP hooks
(thanks to @wledfor2), in which the long path prefix \\?\
or \\?\UNC\
is added. Adding a prefix is done by calling the internal function
Path.AddLongPathPrefix
.
Note also that the addition of such prefixes depends on the UseLegacyPathHandling
and BlockLongPaths
settings, which must necessarily be false
(in the AppContextSwitchOverrides
element).
In this case, your code does not need to directly add such prefixes to the paths.
Supported Platforms:
- .NET Framework 4.6.2+ (see .NET Blog)
How to use
- Add the Chessar.LongPaths NuGet package to the project.
- In the file
app.config
, in the sectionruntime
, add:
<configuration>
...
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
...
- In the code (when you start the application or at the beginning of
Main
) add code:
...
using static Chessar.Hooks;
...
PatchLongPaths();
- At the end of the application:
RemoveLongPathsPatch();
Notes
For the following list of ctors/methods, you must directly specify the prefix of long paths (because they are not supported by this library):
new DirectorySecurity(String, AccessControlSections)
new FileSecurity(String, AccessControlSections)
Directory.GetAccessControl(String[, AccessControlSections])
File.GetAccessControl(String[, AccessControlSections])
Directory.Move(String, String)
Directory.Delete(String[, Boolean])
(at Release build)
for example:
...
using static Chessar.Hooks;
...
var ds = new DirectorySecurity(path.AddLongPathPrefix(), acs);
Note that Directory.SetCurrentDirectory
does not work for long paths, even if a prefix is added.
License
MIT - See LICENSE
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.1.8 | 1,618 | 10/25/2018 |
1.1.7 | 796 | 10/2/2018 |
1.1.7-rc003 | 603 | 10/2/2018 |
1.1.6 | 771 | 9/24/2018 |
1.1.5 | 749 | 9/23/2018 |
1.1.4 | 793 | 9/21/2018 |
1.1.3 | 771 | 9/20/2018 |
1.1.2 | 825 | 9/16/2018 |
1.1.1 | 791 | 9/12/2018 |
1.1.0 | 795 | 9/10/2018 |
1.0.9 | 844 | 9/4/2018 |
1.0.8 | 811 | 8/26/2018 |
1.0.7 | 860 | 7/30/2018 |
1.0.6 | 809 | 7/25/2018 |
1.0.5 | 827 | 7/19/2018 |
1.0.4 | 905 | 7/18/2018 |
1.0.3 | 923 | 7/18/2018 |
1.0.2 | 918 | 7/18/2018 |
1.0.1 | 947 | 7/12/2018 |
1.0.0 | 922 | 7/12/2018 |
1.0.0-rc005 | 691 | 7/5/2018 |
1.0.0-rc004 | 758 | 6/20/2018 |
1.0.0-rc003 | 751 | 6/18/2018 |
First pre-release