.NET读取.lnk文件的二进制内容

时间:2010-04-02 09:17:03

标签: c# .net shortcut

我想阅读.lnk文件的二进制内容。 只要快捷方式(lnk文件)的目标存在,这就可以正常使用IO.File.ReadAllBytes(字符串文件)。

BUT

如果快捷方式的目标不存在(相信我,我想要这个),该方法只返回零。我想这是因为OS跟随链接,如果它不存在则返回零

在显示.lnk文件的内容之前,是否有某种方法可以绕过框架遵循.lnk目标的事实?

3 个答案:

答案 0 :(得分:20)

它没有多大意义,没有一个简单的方法来检查它。我认为最好的方法是按照应该读取的方式读取.lnk文件。您可以使用COM来执行此操作,ShellLinkObject class实现IShellLink接口。开始使用Project + Add Reference,Browse选项卡并导航到c:\ windows \ system32 \ shell32.dll。这会生成一个互操作库。写这样的代码:

public static string GetLnkTarget(string lnkPath) {
    var shl = new Shell32.Shell();         // Move this to class scope
    lnkPath = System.IO.Path.GetFullPath(lnkPath);
    var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(lnkPath));
    var itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath));
    var lnk = (Shell32.ShellLinkObject)itm.GetLink;
    return lnk.Target.Path;
}

答案 1 :(得分:0)

我不相信ReadAllBytes会导致操作系统跟随lnk到达目标。我怀疑,操作系统已经解析了lnk文件(可能是你在Windows资源管理器中浏览文件时)。

答案 2 :(得分:0)

原来这个文件被锁定了,因为它是从另一台机器上复制的(我使用的是服务器2008 r2)解锁后它返回了预期的行为。

愚蠢的我。

相关问题