12

.NET では、System.IO.File.GetAttributes() を呼び出して ReparsePoint ビットをチェックすることで、ファイルがシンボリック リンクかどうかを判断できると思います。そのようです:

var a = System.IO.File.GetAttributes(fileName);
if ((a & FileAttributes.ReparsePoint) != 0)
{
    // it's a symlink
}

この場合、シンボリックリンクのターゲットを取得するにはどうすればよいですか?


ps:シンボリック リンクを作成する方法を知っています。P/Invoke が必要です。

[Interop.DllImport("kernel32.dll", EntryPoint="CreateSymbolicLinkW", CharSet=Interop.CharSet.Unicode)] 
public static extern int CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags); 
4

4 に答える 4

10

DeviceIoControl() を使用して、FSCTL_GET_REPARSE_POINT 制御コードを送信する必要があります。P/Invoke と API の使用方法の詳細は非常にざらざらしていますが、 Google は非常によく機能します。

于 2010-02-20T14:27:12.507 に答える
5

を使用してファイルCreateFileを開き、ハンドルをGetFinalPathNameByHandleに渡します。

于 2010-02-20T14:27:25.107 に答える
3

.NET 6 では、 LinkTargetプロパティを使用できます。

bool IsLink(string path)
{
    var fi = new FileInfo(path);
    return fi.LinkTarget != null
}
于 2022-01-18T21:03:53.573 に答える