我想讀取.lnk文件的二進制內容。 只要快捷方式(lnk文件)的目標存在,對IO.File.ReadAllBytes(字符串文件)就可以正常工作。.NET讀取.lnk文件的二進制內容
但
如果快捷方式的目標不存在(相信我,我想這一點)的方法只返回零。我想這是因爲操作系統遵循鏈接,如果它不存在它返回零
是否有某種方法可以繞過這一事實,該框架在顯示.lnk文件的內容之前遵循.lnk的目標?
我想讀取.lnk文件的二進制內容。 只要快捷方式(lnk文件)的目標存在,對IO.File.ReadAllBytes(字符串文件)就可以正常工作。.NET讀取.lnk文件的二進制內容
但
如果快捷方式的目標不存在(相信我,我想這一點)的方法只返回零。我想這是因爲操作系統遵循鏈接,如果它不存在它返回零
是否有某種方法可以繞過這一事實,該框架在顯示.lnk文件的內容之前遵循.lnk的目標?
原來的文件被鎖定,因爲它是從另一臺機器複製(我使用Server 2008 R2中)在解鎖它返回behavoir預期。
愚蠢的我。
我不相信ReadAllBytes誘使操作系統跟蹤lnk到它的目標。我懷疑,操作系統已經解決了lnk文件(也許當你瀏覽到Windows資源管理器中的文件)。
它沒有多大意義,沒有一個簡單的方法來檢查它。我認爲最好的方法是按照它應該讀取的方式讀取.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;
}
不錯的片段。順便說一句,當我用這個我不得不改變最後一行返回lnk.Target.Path。 – 2011-04-17 02:14:21
其實,最後一行應該是返回lnk.Path – 2011-06-20 21:35:12
它甚至可以用變音符號! – qub1n 2013-10-24 08:09:31
這是來自另一臺計算機的廣告快捷方式,因此該鏈接永遠無法解析 – Flores 2010-04-02 09:29:36