Сначала проверьте, что ваш файл .lnk находится в пути.
Затем (и наиболее вероятная причина вашей проблемы) проверьте, что ваше имя файла .lnk создано правильно. Чтобы убедиться, что это не похоже на «blender.lnk.lnk» (я могу воспроизвести вашу проблему, если я установил как это).
Вы также можете попытаться самостоятельно проанализировать путь к файлу ссылки. Вот пример:
void ShortcutToRealpath(LPWSTR pszString, LPSTR pdzString)
{
IShellLink *pShellLink;
HRESULT hRes;
::CoInitialize(NULL);
hRes = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&pShellLink);
if (SUCCEEDED(hRes))
{
IPersistFile *ppf;
hRes = pShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf);
if (SUCCEEDED(hRes))
{
hRes = ppf->Load(pszString, TRUE);
if (SUCCEEDED(hRes))
{
pShellLink->GetPath(pdzString, MAX_PATH, NULL, 0);
}
ppf->Release();
}
pShellLink->Release();
}
::CoUninitialize();
}
Когда я собираюсь как платформа x86, путь будет проанализирован следующим образом: Вот почему ваша программа не может найти путь.
Поместите целевой файл в соответствующий файл.
РЕДАКТИРОВАТЬ:
После того, как я протестировал его с помощью инструмента MS Procmom.exe , я нашел что-то другое, если он работает как 32-битный, он покажет: [ 1114]
Значение ключа - C:\Program Files (x86)
, и если мы запустим его как 64-битный, ключ будет ссылаться на «HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ ProgramFilesDir» значение ключа C:\Program Files
. После того, как я проверил реестр: Кажется, что C:\Program Files
не отображается по умолчанию в 32-битном реестре (я не уверен насчет конкретной причины). Если вы измените ключ ProgramFilesDir
на C:\Program Files
в 32-битном реестре, проблема будет исправлена.
Я одобряю рекурсивные решения когда:
реализация рекурсии намного более проста, чем повторяющееся решение, обычно потому что это использует структурный аспект проблемы способом, что итерационный подход не может
, меня можно обоснованно уверить, что глубина рекурсии не вызовет переполнение стека, предполагая, что мы говорим о языке, который реализует рекурсию этот путь
, Условие 1, кажется, не имеет место здесь. Повторяющееся решение о том же уровне сложности, таким образом, я придерживался бы повторяющегося маршрута.
Если бы система, Вы продолжаете работать, имеет маленький стек (встроенные системы), глубина рекурсии была бы ограничена, так выбор основанного на цикле алгоритма будет желаем.
Если Ваш код будет скомпилирован, то это будет, вероятно, иметь мало значения. Сделайте некоторое тестирование и посмотрите, сколько памяти используется и как быстро это работает.
Я нахожу рекурсию более естественной, но Вы можете быть вынуждены использовать цикл, если Ваш компилятор не делает, оптимизация последнего вызова и Ваше дерево/список слишком глубоки для размера стека.
Это доказуемо, что все рекурсивные алгоритмы хвоста могут быть развернуты в цикл, и наоборот. Вообще говоря, рекурсивная реализация рекурсивного алгоритма является более четкой следовать для программиста, чем реализация цикла и является также легче отладить. Также вообще говоря, реальное выполнение реализации цикла будет быстрее, как ответвление/переход в цикле обычно быстрее для выполнения, чем продвижение и сование стекового фрейма.
Лично разговор, для рекурсивных алгоритмов хвоста я предпочитаю придерживаться рекурсивной реализации во всех кроме most-performance-intensive ситуаций.
Используйте цикл. Легче читать и понять (чтение кода всегда намного более трудно, чем запись его), и обычно намного быстрее.
Если Вы используете функциональный язык (кажется, не так), пойдите с рекурсией. В противном случае цикл будет, вероятно, лучше понят под кем-либо еще работающим над проектом. Конечно, некоторые задачи (как рекурсивный поиск каталога) лучше подходят для рекурсии, чем другие.
кроме того, если код не может быть оптимизирован для рекурсии заключительной части, цикл более безопасен.
Рекурсия используется для выражения алгоритма, который является естественно рекурсивным в форме, которая более легко понятна. "Естественно рекурсивный" алгоритм является тем, где ответ создается от ответов до меньших подпроблем, которые в свою очередь создаются от ответов до еще меньших подпроблем, и т.д. Например, вычисляя факториал.
На языке программирования, который не функционален, итерационный подход почти всегда быстрее и более эффективен, чем рекурсивный подход, таким образом, причиной использовать рекурсию является ясность, не скорость. Если рекурсивная реализация заканчивает тем, что была меньше четкая, чем повторяющаяся реализация, то любой ценой избегают его.
В данном случае, я судил бы, что повторяющаяся реализация является более четкой.
Если производительность имеет значение, то сравните обоих и выберите на рациональной основе. В противном случае тогда выберите на основе сложности с беспокойством о возможном переполнении стека.
существует инструкция из классической книги Элементы Стиля программирования (Kernighan и Plauger), что алгоритм должен следовать за структурой данных. Таким образом, рекурсивные структуры часто обрабатываются более ясно с рекурсивными алгоритмами.
Я сказал бы, что версия рекурсии лучше понятный, но только с комментариями:
Item Search(string desired, Scope scope) {
// search local items
foreach(Item item in scope.items)
if(item.name == desired)
return item;
// also search parent
return scope.Parent ? Search(desired, scope.Parent) : null;
}
намного легче объяснить эту версию. Попытайтесь записать хороший комментарий к версии цикла, и Вы будете видеть.