Копирование файлов за ярлыками в C # - PullRequest
3 голосов
/ 12 октября 2011

Я использую C # для доступа к самым последним файлам в системе и копирую их с помощью

Environment.SpecialFolder.Recent

Недавняя папка в Windows, однако, просто создает ярлыки для фактического расположения файла.Как можно было бы скопировать файл, на который указывает ярлык, в отличие от самого ярлыка?

Заранее большое спасибо за любую помощь

Ответы [ 3 ]

1 голос
/ 12 октября 2011

Я нашел и изменил этот код, у меня работает:

static string GetShortcutTargetFile(string shortcutFilename)
{
    string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
    string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);

    Shell32.Shell shell = new Shell32.Shell();
    Shell32.Folder folder = shell.NameSpace(pathOnly);
    Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
    if (folderItem != null)
    {
        return ((Shell32.ShellLinkObject)folderItem.GetLink).Path;
    }

    return ""; // not found, use if (File.Exists()) in the calling code
    // or remove the return and throw an exception here if you like
}

Чтобы сделать эту работу, необходимо добавить ссылку на COM-объект Microsoft Shell Controls And Automation (Shell32.dll) в проект.

0 голосов
/ 12 октября 2011

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

0 голосов
/ 12 октября 2011

Это аналогичный вопрос, который был задан некоторое время назад, но в первом ответе содержится код, который будет делать то, что вы хотите, до разрешения имени целевого файла / папки.

Как разрешить .lnk в c #

Оттуда вы просто просматриваете список ярлыков, определяете их связанное местоположение и используете File.Copy(linkPath, copyPath); для завершения задания.

...