Копирование файлов за ярлыками в C #

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

Environment.SpecialFolder.Recent

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

Большое спасибо за любую помощь


person Ben Collins    schedule 12.10.2011    source источник
comment
возможный дубликат Как разрешить .lnk в C #   -  person ChrisF    schedule 12.10.2011


Ответы (3)


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

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
}

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

person CodeCaster    schedule 12.10.2011
comment
Где Shell32 в BCL? - person spender; 12.10.2011
comment
Кажется разумным, но остерегайтесь проблем с объектами, для доступа к которым требуются права администратора. См. stackoverflow.com/questions/2934420/. - person corvuscorax; 12.10.2011

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

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

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

person A.R.    schedule 12.10.2011

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

person Oliver    schedule 12.10.2011