1

如何检查不一定存在的文件的路径是否指向特定目录中的位置?说我有一个方法:

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")

应该返回假。我现在唯一能想到的就是使用 string's StartsWith,但对我来说听起来有点 hacky。我还没有找到可以检查这个的本地 .NET 方法。

4

2 回答 2

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);
于 2012-07-23T03:17:03.150 回答
2

你可以试试这个string.IndexOf方法。如果您将重载StringComparison 枚举一起使用,它应该会为您提供所需的结果。

从上面的链接:

报告此字符串中第一次出现一个或多个字符或第一次出现字符串的从零开始的索引。如果在此实例中未找到字符或字符串,则该方法返回 -1。

bool IsInside(string folder, string path)
{
   if (path.IndexOf(folder,StringComparison.OrdinalIgnoreCase) != -1)
        return true;
    else
        return false;    
于 2012-07-23T03:02:37.977 回答