1

特定のパスが、特定の場所を明確に指定する明示的なパスであるかどうかを確認したいと考えています。したがって、次のようなパスを除外したいと思います。

file
directory
directory\file
C:file
\directory\file

許可したい:

C:\file
C:\directory
C:\directory\file
\\server\share\file
\\server\share\directory\file

メソッドはPath.IsRooted必要なことをほぼ実行しますが、上記の最後の 2 つの例 (C:file\directory\file) では true を返します。これらはそれぞれ、現在のディレクトリと現在のドライブを意味します。

私が使用できる別の方法はありますか?ファイル/ディレクトリが実際に存在するかどうかは気にしないことに注意してください。

4

2 に答える 2

2

結果を使用Path.GetFullPath()して元の文字列と比較します。

bool IsPathAbsolute(string path)
{
    return Path.GetFullPath(path) == path;
}
于 2012-12-05T15:16:21.360 に答える
1

ソースコードを掘り下げると、実際の実装は次のPath.IsPathRootedようになります。

public static bool IsPathRooted(string path)
{
    if (path != null)
    {
        Path.CheckInvalidPathChars(path);
        int length = path.Length;
        if ((length >= 1 && (path[0] == Path.DirectorySeparatorChar || path[0] == Path.AltDirectorySeparatorChar))
            || (length >= 2 && path[1] == Path.VolumeSeparatorChar))
        {
            return true;
        }
    }
    return false;
}

これで、ニーズに合わせて調整する方法が明らかになりました。新しいメソッドを定義して、条件を少し変更できます (少しリファクタリングすることもできます。見栄えがよくありません)。

if ((length >= 1 && ((path[0] == Path.DirectorySeparatorChar && path[1] == Path.DirectorySeparatorChar) || path[0] == Path.AltDirectorySeparatorChar))
    || (length >= 3 && path[1] == Path.VolumeSeparatorChar && path[2] == Path.DirectorySeparatorChar))
于 2012-12-05T15:27:19.030 に答える