2010-04-02 2 views
6

Ich möchte den binären Inhalt einer LNK-Datei lesen. Solange das Ziel der Verknüpfung (lnk-Datei) existiert, funktioniert dies mit IO.File.ReadAllBytes (string-Datei)..NET binäre Inhalte von LNK-Datei lesen

ABER

Wenn das Ziel der Verknüpfung nicht existiert (glauben Sie mir, ich will das) die Methode nur Nullen zurückgibt. Ich denke, das liegt daran, dass das Betriebssystem den Link folgt und wenn es nicht existiert, gibt es Null

Gibt es eine Möglichkeit, die Tatsache zu umgehen, dass das Framework dem Ziel der. Lnk vor dem Anzeigen der Inhalte der LNK-Datei folgt ?

Antwort

0

die Datei Es stellte sich heraus gesperrt wurde, weil es von einem anderen Rechner kopiert wurde (ich verwende Server 2008 R2) Entriegeln den behavoir kehrte zu erwarten.

Dumm mir.

0

Ich glaube nicht, dass ReadAllBytes das OS dazu veranlasst, dem lnk zu seinem Ziel zu folgen. Ich vermute, das Betriebssystem hat die lnk-Datei bereits aufgelöst (vielleicht, wenn Sie in Windows Explorer zu der Datei geblättert haben).

+0

Es ist eine angekündigte Verknüpfung von einem anderen Computer, so dass der Link nie gelöst werden kann – Flores

18

Es macht nicht viel Sinn, habe keine einfache Möglichkeit, es zu überprüfen. Ich denke, der beste Ansatz besteht darin, die .lnk-Datei so zu lesen, wie sie gelesen werden soll. Sie können dazu COM verwenden, das ShellLinkObject class implementiert die IShellLink-Schnittstelle. Beginnen Sie mit Projekt + Verweis hinzufügen, Registerkarte Durchsuchen und navigieren Sie zu c: \ windows \ system32 \ shell32.dll. Das erzeugt eine Interop-Bibliothek. Schreiben von Code wie folgt aus:

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; 
} 
+0

Nizza Ausschnitt. BTW, als ich das verwendete, musste ich die letzte Zeile ändern, um lnk.Target.Path zurückzugeben. –

+0

Eigentlich sollte die letzte Zeile zurückgegeben werden lnk.Path –

+0

Es funktioniert sogar mit diakritischen Zeichen! – qub1n

Verwandte Themen