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

falseを返す必要があります。私が今考えることができる唯一のことは文字列を使用することですがStartsWith、私にはちょっとハッキーに聞こえます。これをチェックするネイティブの.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つ以上の文字、または最初に出現する文字列のゼロベースのインデックスを報告します。このインスタンスで文字または文字列が見つからない場合、メソッドは-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 に答える