我的一些.URL书签文件已损坏

时间:2013-08-21 19:22:07

标签: caching bookmarks shortcuts

我编写了一个程序来创建一些书签/收藏夹快捷方式(.url文件)。我已经检查了它创建的一些书签文件,其中一些是可以的(图1),但是其中一些显示有不同的图标(图2),并在尝试打开它们时给出错误消息(图3)

我已经使用文本编辑器检查了文件,并确认它们确实包含相应的书签数据。我甚至通过将快捷方式直接从浏览器拖到文件夹中创建了一些测试书签,并将它们与我的程序创建的文件进行了比较,它们是按位相同的。

我发誓他们使用一切都很好,但现在他们似乎不再工作了。这是怎么回事?我该如何解决?


<小时/>

图1 :部分生成的书签文件很好

Screenshot of folder with good generated bookmarks


图2 :一堆生成的书签文件被破坏(现在?)

Screenshot of folders with broken generated bookmarks


图3 :对话框声称书签的目标无效,即使它没有

Screenshot of Invalid Shortcut Target error message

1 个答案:

答案 0 :(得分:0)

事实证明,这是因为缓存而发生的。 Windows资源管理器缓存文件(特别是小的“系统”文件,如包含书签的快捷方式)。问题是它可以过早地缓存它们,因此如果文件无效(例如,在开发期间)或者在文件写完之前它被缓存(‽),那么Explorer将继续使用它直到缓存被清除。显然,修复它的一种方法是简单地清除缓存,但唯一明显的方法是重启(也许还要注销并重新登录)。当然,这并不理想,特别是如果你还处于开发阶段。

A knowledge-base article表示它适用于带有Internet Explorer 7的Windows XP,Vista和Server 2003,并且有适用于它们的修补程序,但它也适用于带有IE9的Windows 7,它没有修补程序(即使在Windows 7发布很久之后,2011年10月发布了修补程序。)

解决此问题的一种简单方法是重命名书签文件或包含文件夹。无论哪种方式,资源管理器将其视为“新”文件并忽略缓存。

一个常见的问题是,每次运行程序时都不能简单地重命名文件或文件夹(你可以,但它并不理想)。因此,您需要解决导致Windows缓存坏文件的问题。这里有一些提示:

  • 减少创建空.url和写入其内容之间的时间。例如,不是打开/创建文件,而是将内容构建为字符串并将其写入文件,考虑在打开文件之前将内容(无论如何都是简单和小)构建为字符串 。然后转储内容并关闭它。这使得更有可能在Windows注意到文件时,它已经有了它的内容。

  • 检查文件编码是否不是Unicode,BOM等。现在URL中可接受Unicode字符,.url文件不仅仅是ASCII,它可能有一些UTF-8字符但是整个事情不会是广泛的。

  • 检查您的行尾为CR+LF。在写入文件时,只需添加\n即可,但您应该像Windows和浏览器一样使用\r\n

  • 确保该文件不包含非法字符。它通常不可能,但它可能会发生。

此外,某些书签自然会有通用的globe图标,并在您尝试打开它们时抛出错误。对于链接到未通过书签打开的系统中未设置的不同协议的任何书签都是如此:

  • Chrome内部页面,如chrome://version
  • javascript:alert('Woot!');
  • 这样的书签
  • 如果协议未在系统中注册,则为ed2k://…等P2P协议