<PackageReference Include="Relativity.Transfer.Client" Version="7.1.29" />

PathHelper

public static class PathHelper
using System; using System.IO; namespace Relativity.Transfer { public static class PathHelper { public const int MaxSupportedPathLength = 248; public const int MaxDisplayedPathLength = 200; public static readonly string UncSignature = string.Empty.PadLeft(2, Path.DirectorySeparatorChar); public static readonly string UnixSignature = '/'.ToString(); private const int WindowsAppendFileNameLength = 12; private const int WindowsMaxPathLength = 260; private const char WindowsPathSeparator = '\\'; private const char UnixPathSeparator = '/'; public static string CombineUnc(string path1, string path2) { if (string.IsNullOrEmpty(path1)) throw new ArgumentNullException("path1"); if (string.IsNullOrEmpty(path2)) throw new ArgumentNullException("path2"); NormalizePath(ref path1); NormalizePath(ref path2); path1 = TrimTrailingSlash(path1); path2 = TrimLeadingSlash(path2); return Path.Combine(path1, path2); } public static string CombineUnix(string path, string item) { if (string.IsNullOrEmpty(path)) throw new ArgumentNullException("path"); return NormalizeUnixPath(path) + "/" + item; } public static bool IsUncPath(string path) { if (!string.IsNullOrEmpty(path)) { NormalizePath(ref path); return !string.IsNullOrEmpty(path) && path.StartsWith(UncSignature, StringComparison.OrdinalIgnoreCase); } return false; } public static bool IsUnixPath(string path) { if (!string.IsNullOrEmpty(path)) return !string.IsNullOrEmpty(path) && path.StartsWith(UnixSignature, StringComparison.OrdinalIgnoreCase); return false; } public static void NormalizePath(ref string path) { if (!string.IsNullOrEmpty(path) && path.StartsWith("file://", StringComparison.OrdinalIgnoreCase)) try { Uri uri = new Uri(path, UriKind.RelativeOrAbsolute); path = uri.LocalPath; } catch (ArgumentException) { } catch (UriFormatException) { } } public static string GetTargetFilePath(string sourcePath, string targetPath, string targetFileName) { string text = (!string.IsNullOrEmpty(targetFileName)) ? targetFileName : Path.GetFileName(sourcePath); return IsUnixPath(targetPath) ? CombineUnix(targetPath, text) : Path.Combine(targetPath, text); } public static string ToUnixPath(string path) { if (string.IsNullOrEmpty(path)) throw new ArgumentNullException("path"); return path.Replace('\\', '/'); } public static string ToWindowsPath(string path) { if (string.IsNullOrEmpty(path)) throw new ArgumentNullException("path"); return path.Replace('/', '\\'); } public static string TrimLeadingSlash(string path) { return string.IsNullOrEmpty(path) ? string.Empty : path.TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); } public static string TrimTrailingSlash(string path) { return string.IsNullOrEmpty(path) ? string.Empty : path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); } public static string GetRelativePathDirectory(string file) { char c; if (!string.IsNullOrEmpty(file)) { int num = file.Length; while (num > 0 && file[--num] != '/') { } if (num >= 1) return file.Substring(0, num); c = '/'; return c.ToString(); } c = '/'; return c.ToString(); } public static string NormalizeUnixPath(string path) { if (!string.IsNullOrEmpty(path)) { path = ToUnixPath(path); path = path.TrimStart(new char[1] { '/' }); path = path.TrimEnd(new char[1] { '/' }); } path = "/" + path; return path; } internal static string CheckAddLongPathPrefix(string path) { if (!string.IsNullOrEmpty(path) && !path.StartsWith("\\\\?\\", StringComparison.OrdinalIgnoreCase)) return (path.Length > 248) ? ForceAddLongPathPrefix(path) : path; return path; } internal static string ForceAddLongPathPrefix(string path) { if (!string.IsNullOrEmpty(path) && !path.StartsWith("\\\\?\\", StringComparison.OrdinalIgnoreCase)) { if (!path.StartsWith("\\\\", StringComparison.OrdinalIgnoreCase)) return "\\\\?\\" + path; return "\\\\?\\UNC\\" + path.Substring(2); } return path; } internal static string ForceRemoveLongPathPrefix(string path) { if (!string.IsNullOrEmpty(path) && path.StartsWith("\\\\?\\", StringComparison.OrdinalIgnoreCase)) { if (!path.StartsWith("\\\\?\\UNC\\", StringComparison.OrdinalIgnoreCase)) return path.Substring("\\\\?\\".Length); return "\\\\" + path.Substring("\\\\?\\UNC\\".Length); } return path; } } }