2013-08-21 3 views
0

Я написал программу, которая создает ярлыки закладки/избранного (.url файлов). Я изучил некоторые файлы закладок, которые он создает, и некоторые из них в порядке (рисунок 1), но некоторые из них отображаются с другим значком (рисунок 2) и дают сообщение об ошибке при попытке открыть их (рисунок 3) ,Некоторые из моих файлов закладок .URL разбиты

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

Клянусь, они использовали, чтобы все было хорошо, но теперь они просто больше не будут работать. Что происходит? Как я могу это исправить?



Рисунок 1: Некоторые из сгенерированных файлов закладки хороши

Screenshot of folder with good generated bookmarks


Рисунок 2: Пучок сгенерированных файлов закладки разбиты (теперь ?)

Screenshot of folders with broken generated bookmarks


Рисунок 3: Диалог утверждает, что закладка имеет недопустимую цель, даже если она не

Screenshot of Invalid Shortcut Target error message

ответ

0

Оказывается, что это происходит из-за тайником. Проводник Windows кэширует файлы (особенно маленькие, «системные» файлы, такие как ярлыки, которые включают закладки). Проблема заключается в том, что он может кэшировать их преждевременно, поэтому, если файл недействителен (например, во время разработки) или он кэшируется до того, как файл завершит запись (‽), тогда Explorer продолжит использовать его до тех пор, пока кеш не будет очищен. Очевидно, один из способов исправить это - просто очистить кеш, но единственный очевидный способ сделать это - перезагрузить (возможно, также выйти из системы и обратно). Конечно, это не идеально, особенно если вы все еще находимся в середине развития.

A knowledge-base article говорит, что он относится к Windows XP, Vista и Server 2003 с Internet Explorer 7 и имеет исправление для них, но это происходит и с Windows 7 с IE9, у которого нет исправления (хотя исправление было выпущено в октябре 2011 года, вскоре после выхода Windows 7).

Простым способом обойти это является переименование файла закладки или содержащей папки. В любом случае, Explorer видит его как «новый» файл и игнорирует кеш.

Общая проблема заключается в том, что вы не можете просто переименовывать файл или папку каждый раз, когда вы запускаете программу (ну, вы можете, но это не идеально). Поэтому вы захотите решить проблемы, которые заставляют Windows кэшировать плохие файлы. Вот несколько советов о том, как это сделать:

  • Снизить количество времени между созданием пустого .url и записи его содержимого.Например, вместо того, чтобы открывать/создавать файл, а затем создавать содержимое в виде строк и записывать их в файл, подумайте о создании содержимого (которое является простым и маленьким) в виде строки до, открывающей файл. Затем выгрузите содержимое и закройте его. Это делает более вероятным, что к тому моменту, когда Windows заметит файл, у него уже будет свое содержание.

  • Проверьте, что кодировка файла не является Юникодом, спецификацией и т. Д. Теперь, когда символы Юникода допустимы в URL-адресах, файл .url не будет ASCII-only, он может иметь некоторые символы UTF-8, но все это не будут широкоугольными.

  • Проверьте, что ваши линейные окончания: CR+LF. При записи в файл легко просто добавить \n, но вы должны использовать \r\n, как Windows и браузеры.

  • Убедитесь, что файл не содержит недопустимых символов. Как правило, это невозможно, но это может произойти.

Кроме того, в некоторых закладах, естественно, есть общий символ земного шара и выдается ошибка при попытке их открыть. Это верно для любых закладок, которые ссылаются на различные протоколы, которые не созданы в системе должны быть открыты с помощью закладок:

  • Chrome Internals страниц как chrome://version
  • Букмарклетов как javascript:alert('Woot!');
  • P2P протоколы, как ed2k://… если протокол не зарегистрирован в системе
Смежные вопросы