我正在使用Visual Studio C++ 2008和2010开发一个应用程序.我有一个简单的需求:我想找出符号链接(.lnk或快捷方式)文件的目标.我已经梳理了网络以找到答案并且没有任何运气.
我可以看到MSDN有两个功能来创建符号链接
BOOLEAN WINAPI CreateSymbolicLink( 在 LPTSTR lpSymlinkFileName中, 在 LPTSTR中lpTargetFileName, 在 DWORD dwFlags中);
BOOLEAN WINAPI CreateSymbolicLinkTransacted( 在 LPTSTR lpSymlinkFileName中, 在 LPTSTR lpTargetFileName中, 在 DWORD dwFlags中, 在 HANDLE hTransaction中);
但我没有看到任何让你检索目标路径的东西.这对我来说似乎很奇怪,因为它是符号链接文件的基本属性.这些信息不会保存在文件头信息中吗?
MSDN网站上推荐的一个建议就是这个
h = CreateFile (
path,
FILE_READ_ATTRIBUTES,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_REPARSE_POINT | FILE_FLAG_OPEN_REPARSE_POINT,
0);
DeviceIoControl (
h,
FSCTL_GET_REPARSE_POINT,
NULL,
0,
buffer,
bufferSize,
&returnedDataSize,
NULL);
Run Code Online (Sandbox Code Playgroud)
但它看起来并不像DeviceIoControl对符号链接有意义,因为它是一个设备控制功能.无论如何我尝试了它并没有用,那就是缓冲区没有改变.
有没有人有这方面的经验?任何帮助将不胜感激.
松鸦
.lnk文件不是符号链接.符号链接是文件系统本身的一个特性.这就是您可以DeviceIoControl()
用来查询它们的原因..lnk文件只是一个文件.您可以使用该IShellLink
界面查询和操作.lnk文件.