我看过一些相关的问题,但没有找到问题的确切解决方案...
不管怎样,我有一个无效的符号链接是这样的:
mklink link path/to/dir
这意味着我正在链接到一个目录**,而没有/D标志**。
但是,当我尝试使用WinApi CreateFile
打开目标文件时失败了。我需要将符号链接作为文件还是作为目录打开?
CreateFile(path_to_link,
0,
0,
NULL,
OPEN_EXISTING,
[*],
NULL)
当我在[*]指定目录时,函数失败(GetLastError()拒绝访问。我相信这是因为路径本身被配置为文件,因为我对所有相关文件都有有效权限)。
要处理path/to/dir
,我需要在[*]处输入什么?
注:
- 我必须处理这种mklink的无效使用
- 我的最终目标是得到
path/to/dir
的绝对路径。如果有没有CreateFile
的另一种方法,我很乐意听到它:)
2条答案
按热度按时间xfyts7mz1#
正如注解中所解释的,它的行为类似于Shell Link。下面是解析目标路径的一种方法,它使用IShellItem2 COM接口和System.Link.TargetParsingPath属性。
C++版本:
C版本:
zpgglvta2#
链接到***目录***的***文件***符号链接无法与*CreateFile*协同工作。
mklink默认创建一个文件符号链接,根据符号链接对文件系统函数的影响,对于CreateFile和CreateFileTransacted,
如果指定了文件标志打开重新解析点,并且:
如果未指定FILE_FLAG_OPEN_REPARSE_POINT并且:
而 * 硬链接 * 是文件的文件系统表示,通过它,多个路径引用同一卷中的单个文件。
下面的代码读取一个目录符号链接为我工作。