Tại sao tất cả các giải pháp phức tạp này?
Và liên quan đến Uri? Có thật không ? Bạn sẽ không phải đợi lâu cho ngoại lệ đầu tiên.
Có sự sáng chói trong sự đơn giản.
Không cần thêm bất kỳ lớp khung công tác bổ sung nào.
public static string BuildRelativePath(string absolutePath, string basePath)
{
return absolutePath.Substring(basePath.Length);
}
Và chỉ trong trường hợp bạn không thể quản lý để luôn thêm hoặc để luôn luôn bỏ qua System.IO.Path.DirectorySeparatorChar đóng cửa để dây của bạn, hoặc bạn không thể không trộn lẫn các đối số:
public static string FaultTolerantRelativePath(string absolutePath, string basePath)
{
if(absolutePath == null || basePath == null)
return null;
absolutePath = absolutePath.Replace(System.IO.Path.DirectorySeparatorChar, '/');
basePath = basePath.Replace(System.IO.Path.DirectorySeparatorChar, '/');
if (!basePath.EndsWith("/"))
basePath += "/";
if (!absolutePath.EndsWith("/"))
absolutePath += "/";
if (absolutePath.Length < basePath.Length)
throw new ArgumentException("absolutePath.Length < basePath.Length ? This can't be. You mixed up absolute and base path.");
string resultingPath = absolutePath.Substring(basePath.Length);
resultingPath = resultingPath.Replace('/', System.IO.Path.DirectorySeparatorChar);
return resultingPath;
}
Nguồn
2013-11-22 11:46:54
Kết quả mong đợi không phải là "MoreSubFolder \ LastFolder \ SomeFile.txt"? –
Cảm ơn Yup vì đã chỉ ra sai lầm của tôi! – asmo
Bạn cần phải nói lại cụm từ này. Tôi đọc nó hai lần, và tôi vẫn không chắc chắn những gì bạn muốn thực sự.Nếu không, tôi bị cám dỗ trả lời: sử dụng các phương thức IndexOf và Substring để lấy phần thứ 2 của đường dẫn (hoặc để loại bỏ phần thứ nhất của đường dẫn) - và tôi có cảm giác đó không phải là thứ bạn muốn. Xem xét các phương thức tĩnh của lớp System.IO.Path - nó có một vài trình trợ giúp tốt để kết hợp các đường dẫn và tương tự. –