2011-02-23 91 views
1

我的需求很简单。给定一个Windows目录路径,我想要的是实际的路径。我确定这个术语是错误的,所以我举了一个例子。如何使用.NET获取Windows上的实际目录路径?

鉴于C:\ Documents和Settings \所有用户该方法应显示:

  • C:\ ProgramData上视窗7
  • C:\ Documents和Settings \所有用户在Windows 2003上

这是因为在Windows 7上C:\ Documents and Settings一路口引用C:\用户C:\ Users \ All用户是另一个路口引用C:\ ProgramData,这是实际的目录。

所以,我的问题是什么.NET API让我做这一切?

谢谢。

+0

[this]的可能重复(http://stackoverflow.com/questions/2240734/c-how-to-retreive-the-target-of-a-junction-or-symlink-with-a-standard-user)或[this](http://stackoverflow.com/questions/4571622/ntfs-junctions-trouble-understanding-the-api) – adrianbanks 2011-02-23 16:16:39

+0

你是对的,但只是部分。没有给出.NET API,尽管我可以尝试使用P/Invoke,但这不是首选。 – mark 2011-02-23 16:27:12

+0

我同意。显然唯一的办法是通过P/Invoke。投票结束。 – mark 2011-02-23 22:26:10

回答

1

检查出this code sample已经找到了一个人。

本质上,您必须通过P/Invoke使用Win32函数DeviceIoControl,将FSCTL_GET_REPARSE_POINT作为参数dwIoControlCode

由于在CodeProject的家伙说...

我觉得很有意思的是,.NET框架 的FileAttributes枚举 包括值 FileAttributes.ReparsePoint但 没有其他的内置支持 重新分析点。

没有“本地” .NET API要做到这一点,但是请记住,大部分的框架是就在P上的包装/反正Invoke调用,所以你不应该害怕他们:)