Description
Currently the entire codebase is not long-path compatible:
- .NET Framework does not auto-prefix long-paths with
\\?\
- Using File.IO-APIs in a
LongPathAware
-process doesn't work onLongPathsEnabled=false
-systems - legacy IKVM does not support automatic prefixing of long paths with
\\?\
- legacy IKVM does not support long-path prefixed paths in nio i.e.
Paths.get(@"\\?\C:")
Possible options:
Drop usage of java.nio.file
in all of Cyberduck (and all dependencies) - does not handle long paths issues in System.IO
Add polyfill for System.IO, which automatically prefixes everything with \\?\
as required - does not handle long path issues in java.nio.file
.
With integration of ikvmnet we detach from the legacy IKVM implementation, which reimplemented huge parts of the JDK using .NET technology, with shipping rebuilds of the JDK native code, which restores real JDK behavior (i.e. everything the JDK has built for e.g. java.nio.file does work now). This includes automatic prefixing of long-paths with \\?\
and support of long paths in java.nio.file
.
Until migrating to .NET 8 (or later) an Api analyzer is added to Cyberduck, which bans all of System.IO.