如何检查不一定存在的文件路径是否指向特定目录中的某个位置?说我有一个方法:
bool IsInside(string path, string folder)
{
//...
}
然后,如果我称之为:
IsInside("C:\\Users\\Dude\\Hi", "C:\\Users\\Dude\\Hi\\SubFolder\\SubSubFolder\\tile.txt")
应该返回true
(请注意子文件夹),但如果我将其称为:
IsInside("C:\\Users\\Dude\\Hi", "C:\\Users\\Dude\\BadFolder\\SubFolder\\SubSubFolder\\tile.txt")
应该返回false。我现在唯一能想到的就是使用字符串' StartsWith
,但听起来有点像我这样的hacky。我还没有找到一个可以检查它的本机.NET方法。
答案 0 :(得分:3)
你需要处理相对路径(../../someFile.txt)吗?像这样的东西会起作用:
private bool IsInside(DirectoryInfo path, DirectoryInfo folder)
{
if (path.Parent == null)
{
return false;
}
if (String.Equals(path.Parent.FullName, folder.FullName, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
return IsInside(path.Parent, folder);
}
然后这样称呼:
DirectoryInfo folder = new DirectoryInfo("C:\\Users\\Dude\\Hi");
DirectoryInfo path = new DirectoryInfo("C:\\Users\\Dude\\Hi\\SubFolder\\SubSubFolder\\tile.txt");
bool result = IsInside(path, folder);
答案 1 :(得分:1)
您可以尝试使用string.IndexOf
方法。如果您将overload与StringComparison enumeration一起使用,它应该会为您提供所需的结果。
从上面链接:
报告此字符串中第一次出现的一个或多个字符或字符串第一次出现的从零开始的索引。如果在此实例中找不到字符或字符串,则该方法返回-1。
bool IsInside(string folder, string path)
{
if (path.IndexOf(folder,StringComparison.OrdinalIgnoreCase) != -1)
return true;
else
return false;