如何使用.Net获取符号链接(或重解析点)的目标?
在.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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
根据提到的
GetFinalPathNameByHandle
的答案,这里是执行此操作的 C# 代码(因为所有其他答案都只是指针):使用
代码:
Based on the answer that mentioned
GetFinalPathNameByHandle
here is the C# code that does this (since all other answers were just pointers):Usage
Code:
在 .NET 6 中,您可以使用属性 链接目标
In .NET 6 you can use the property LinkTarget
您必须使用 DeviceIoControl() 并发送 FSCTL_GET_REPARSE_POINT 控制代码。 P/Invoke 和 API 使用详细信息非常详细,但Google 非常好。
You have to use DeviceIoControl() and send the FSCTL_GET_REPARSE_POINT control code. The P/Invoke and API usage details are quite gritty, but it Googles really well.
使用
>CreateFile
,然后将句柄传递给 GetFinalPathNameByHandle。Open the file using
CreateFile
, and then pass the handle to GetFinalPathNameByHandle.