.NET считала двоичное содержание .lnk файла

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

НО

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

Там некоторый путь состоит в том, чтобы обойти то, что платформа следует за целью .lnk прежде, чем отобразить содержание .lnk файла?

7
задан Flores 2 April 2010 в 09:17
поделиться

3 ответа

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

Глупый я.

0
ответ дан 6 December 2019 в 08:42
поделиться

В этом нет большого смысла, нет простого способа проверить это. Я считаю, что лучший подход - прочитать файл .lnk так, как он должен читаться. Для этого можно использовать COM, класс ShellLinkObject реализует интерфейс IShellLink. Начните работу с Project + Добавить ссылку, перейдите на вкладку «Обзор» и перейдите к 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;
}
21
ответ дан 6 December 2019 в 08:42
поделиться

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

0
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: