Eventuali duplicati:
Get target of shortcut folderCome ottengo il nome del percorso da un collegamento di file? Ottenere eccezione
Per esempio, in C:\TEMP\
ho un collegamento denominato test.dll
il collegamento porterà al nome del file test.dll
voglio ottenere dalla scorciatoia solo il nome del percorso al file stesso. Quindi, sto chiamando questa funzione in un'altra funzione ricorsiva e metto in questa funzione ogni volta un'altra directory dal mio hard disk.
Ad esempio, la prima directory è C:\TEMP
quindi in C:\TEMP
c'è il file di collegamento che voglio ottenere il percorso solo per il file. Nel C:\TEMP
per il test che ho ora 3 file:
hpwins23.dat
hpwmdl23.dat
hpwmdl23.dat -Shortcut
(C:\TEMP\hpwmdl23.dat
)
Quindi, quello che voglio ottenere è la nome percorso del collegamento in questo caso il suo C: \ TEMP
ho provato ad utilizzare questa funzione:
public string GetShortcutTargetFile(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell shell = new Shell();
Folder folder = shell.NameSpace(pathOnly);
if (folder == null)
{
}
else
{
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
}
return string.Empty;
}
ma quando sto usando la funzione e il suo arrivare a una scorciatoia sto ottenendo errore di eccezione sulla linea:
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink //The exception is: NotImplementedException: The method or operation is not implemented
cosa shoud faccio a risolverlo?
Questo è il messaggio di errore di eccezione completo:
System.NotImplementedException
è stato catturato
Messaggio = Il metodo o operazione non è implementata.
Fonte =GatherLinks
StackTrace:
aShell32.FolderItem.get_GetLink()
aGatherLinks.Form1.GetShortcutTargetFile(String shortcutFilename)
inD:\C-Sharp\GatherLinks\GatherLinks\GatherLinks\Form1.cs
:line
904
aGatherLinks.Form1.offlinecrawling
Questo utente è più probabile che chiede di risolvere un collegamento simbolico (non una scorciatoia come in .lnk), nel qual caso non riuscirà questo codice. È necessario utilizzare "GetFinalPathNameByHandle()" con PInvoke. Il codice di esempio può essere trovato in questa [voce qui] (http://chrisbensen.blogspot.com/2010/06/getfinalpathnamebyhandle.html). – ykay