Вот решение, которое использует Path.GetFullPath(string path)
:
Создать эту функцию:
private static bool VerifyPathUnderRoot(string pathToVerify, string rootPath = ".")
{
var fullRoot = Path.GetFullPath(rootPath);
var fullPathToVerify = Path.GetFullPath(pathToVerify);
return fullPathToVerify.StartsWith(fullRoot);
}
Затем вы можете проверить это с помощью кода, подобного следующему:
var paths = new[]
{
"somepath/somefile.xxx",
"..\\somepath/somefile.xxx",
@"C:\this\that\the.other",
};
foreach (var path in paths)
{
var isOk = VerifyPathUnderRoot(path);
var okString = isOk ? "OK" : "No";
Debug.WriteLine($"{okString}: {path}");
}
, что приводит к этому в области вывода отладчика:
OK: somepath/somefile.xxx
No: ..\somepath/somefile.xx
No: C:\this\that\the.other
Я дважды использую GetFullPath
, чтобы канонизировать пути (следя за тем, чтобы все косые черты заканчивались одинаково и т. Д.).