Path.GetFullPath()
আপেক্ষিক পথ নিয়ে কাজ করে না।
আপেক্ষিক + নিখুঁত পাথ উভয়ের সাথে কাজ করে এমন সমাধান এখানে। এটি লিনাক্স + উইন্ডোজ উভয় ক্ষেত্রেই কাজ করে এবং এটি ..
পাঠ্যের শুরুর দিকে প্রত্যাশা অনুযায়ী রাখে (বিশ্রামে তারা স্বাভাবিক করা হবে)। সমাধানটি এখনও Path.GetFullPath
একটি ছোট workaround সঙ্গে সংশোধন করতে উপর নির্ভর করে ।
এটি একটি এক্সটেনশন পদ্ধতি তাই এটির মতো ব্যবহার করুন text.Canonicalize()
public static string Canonicalize(this string path)
{
if (path.IsAbsolutePath())
return Path.GetFullPath(path);
var fakeRoot = Environment.CurrentDirectory;
var combined = Path.Combine(fakeRoot, path);
combined = Path.GetFullPath(combined);
return combined.RelativeTo(fakeRoot);
}
private static bool IsAbsolutePath(this string path)
{
if (path == null) throw new ArgumentNullException(nameof(path));
return
Path.IsPathRooted(path)
&& !Path.GetPathRoot(path).Equals(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)
&& !Path.GetPathRoot(path).Equals(Path.AltDirectorySeparatorChar.ToString(), StringComparison.Ordinal);
}
private static string RelativeTo(this string filespec, string folder)
{
var pathUri = new Uri(filespec);
if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) folder += Path.DirectorySeparatorChar;
var folderUri = new Uri(folder);
return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString()
.Replace('/', Path.DirectorySeparatorChar));
}