我正在尝试创建一个小程序,用于在C#(控制台应用程序)中向用户检索快捷方式的目标文件名。 我的代码没有错误,但它没有给我正确的结果。
这是我的代码:(来自:http://snipplr.com/view/47974)
private static string GetTargetPath(string ShortcutPath)
{
string pathOnly = System.IO.Path.GetDirectoryName(ShortcutPath);
string filenameOnly = System.IO.Path.GetFileName(ShortcutPath);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return ""; // not found
}
正如我所说,代码检索错误输出(空字符串),即使文件存在。 例如,我厌倦了在路径中获取某些快捷方式的目标文件:C:\ Users \ Admin123 \ AppData \ Roaming \ Microsoft \ Office \ Recent
这个问题的原因是什么?我该如何解决呢?
的修改我再次尝试了相同的代码,现在它可以工作了!谢谢大家 ! :)
答案 0 :(得分:1)
好吧,我发现您的代码没有任何问题。经过测试,效果很好。
我创建了两个链接:boot.lnk
和prestigio_notes.lnk
,两者都指向正确的文件。他们的输出是:
D:\Boot1.asm
和D:\Dokumenty\Android\Prestigio\doc\prestigio_notes.txt
。
这是我使用的代码(抱歉再次复制粘贴函数,但我希望它是一个完整而清晰的类):
class Program {
static void Main(string[] args) {
Console.WriteLine(GetTargetPath(@"D:\boot.lnk"));
Console.WriteLine(GetTargetPath(@"D:\prestigio_notes.lnk"));
Console.ReadLine();
}
private static string GetTargetPath(string ShortcutPath) {
string pathOnly = System.IO.Path.GetDirectoryName(ShortcutPath);
string filenameOnly = System.IO.Path.GetFileName(ShortcutPath);
Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null) {
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return ""; // not found
}
}
检查您是否从可用引用列表中引用了正确的COM对象。如果失败,请检查您是否有权从指定位置读取。