Cyberduck is a libre FTP, SFTP, WebDAV, Amazon S3, Backblaze B2, Microsoft Azure & OneDrive and OpenStack Swift file transfer client for Mac and Windows.
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 on LongPathsEnabled=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.
To be determined whether WatchService supports long paths (using ReadDirectoryChangesW).
Preliminary tests showed that it's not compatible, but unit test needs to be written.
Currently the entire codebase is not long-path compatible:
\\?\
LongPathAware
-process doesn't work onLongPathsEnabled=false
-systems\\?\
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 injava.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 injava.nio.file
.Until migrating to .NET 8 (or later) an Api analyzer is added to Cyberduck, which bans all of System.IO.