2010-04-02 1 views
6

Я хочу прочитать двоичное содержимое файла .lnk. Пока существует цель ярлыка (файл lnk), это отлично работает с IO.File.ReadAllBytes (строковый файл)..NET читает двоичное содержимое файла .lnk

НО

Если цель ярлыка не существует (поверьте мне, я хочу это) метод возвращает только нули. Я думаю, это связано с тем, что ОС следует за ссылкой, и если она не существует, она возвращает нуль

Есть ли способ обойти тот факт, что структура следует за объектом .lnk перед отображением содержимого файла .lnk ?

ответ

0

Оказывается, файл был заблокирован, поскольку он был скопирован с другого компьютера (я использую Server 2008 R2) отпирание возвращала behavoir к ожидаемой.

Глупо меня.

0

Я не верю, что ReadAllBytes побуждает ОС следовать за lnk до цели. Я подозреваю, ОС уже разрешила файл lnk (возможно, когда вы просматривали файл в Проводнике Windows).

+0

Это рекламный ярлык с другого компьютера, поэтому связь никогда не может быть решена – Flores

18

Это не имеет большого смысла, не имеет простого способа проверить его. Я считаю, что лучший подход - прочитать файл .lnk так, как он должен быть прочитан. Вы можете использовать COM для этого, ShellLinkObject class реализует интерфейс IShellLink. Начните работу с Project + Add Reference, Browse Browse и перейдите к c: \ windows \ system32 \ shell32.dll. Это создает библиотеку interop. Написать такой код:

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

Хороший фрагмент. BTW, когда я использовал это, мне пришлось изменить последнюю строку, чтобы вернуть lnk.Target.Path. –

+0

На самом деле, последняя строка должна быть возвращена lnk.Path –

+0

Он работает даже с диакритикой! – qub1n

 Смежные вопросы

  • Нет связанных вопросов^_^