Как я могу программно проверить, если путь / файл является ярлыком?
Вопрос
Мне нужно проверить, является ли файл ярлыком. Я все еще пытаюсь выяснить, как что-то будет настроено, но у меня может быть только его путь, у меня может быть только фактическое содержимое файла (как байт []), или у меня может быть и то и другое.
Несколько сложностей заключаются в том, что я могу быть в zip-файле (в этом случае путь будет внутренним путем)
Решение
С ярлыками можно управлять с помощью объектов COM в SHELL32.DLL. Р>
В своем проекте Visual Studio добавьте ссылку на библиотеку COM " Microsoft Shell Controls And Automation " а затем используйте следующее:
/// <summary>
/// Returns whether the given path/file is a link
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static bool IsLink(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
return folderItem.IsLink;
}
return false; // not found
}
Фактическую цель ссылки можно получить следующим образом:
/// <summary>
/// If path/file is a link returns the full pathname of the target,
/// Else return the original pathnameo "" if the file/path can't be found
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static string GetShortcutTarget(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
if (folderItem.IsLink)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return shortcutFilename;
}
return ""; // not found
}
Другие советы
Вы можете просто проверить расширение и / или содержимое этого файла. Он содержит специальный GUID в заголовке.
Прочитайте этот документ .
Проверить расширение? (.Lnk) р>