[REAL Studio]保存文件位置信息

有时候我们需要保存文件的位置信息以便在程序下次运行时找到这个文件,比如文件菜单中的“最近打开的文件”之类。如果这个文件需要让各种程序都能找到,那么只能保存文件的绝对路径。如果只要被REAL Studio程序使用,那么应该保存SaveInfo。

SaveInfo需要通过FolderItem类的GetSaveInfo方法来获取,这个方法有两个参数,第一个是相对路径(也是一个FolderItem实例),后一个是个可选的模式参数。

举例如下(假设有个全局字符串变量s):

  Dim f,d as FolderItem
  f=Volume(0).Child("Doc").Child("abc.txt")
  d=Volume(0).Child("Doc")
  s=f.GetSaveInfo(d)
  
在Windows上,f是C:\Doc\abc.txt,d是其所在的文件夹,但其实d可以是任何一个文件或文件夹。上述代码执行后,s中就保存了文件f的SaveInfo,可以将其写入程序设置文件、某个数据库、注册表或defaults中,以便于以后读取。

要从SaveInfo中解析出文件,只要这样:

  Dim f As New FolderItem
  f=f.GetRelative(s)

那么使用SaveInfo有什么好处呢?主要有两点:

1)用于通过相对路径找到文件。比如某个文件夹A中有文件b,在调用GetSaveInfo时,将A传入,即s=b.GetSaveInfo(A);随后如果你整体移动了文件夹A(b仍在A内),在试图解析出b时,通过b=A.GetRelative(s),仍然可以找到b,当然这里的A必须是指向移动后的文件夹。

2)即便不需要上面这个好处,也应该使用GetSaveInfo,它不光保存了相对、绝对路径,还保存了其他信息,使得更名或移动过的文件(主要在Unix系统上)仍能被找到。比如在Mac上,使用s=f.GetSaveInfo(Volume(0))并将s的值保存起来,以后即使文件f被改名或移动(严格的说是在当前磁盘分区,或者说卷内移动,当然在Mac上跨磁盘移动不容易,要Command+Shift+拖曳文件),仍然能通过所保存的SaveInfo解析到更名或移动后的文件。对这种用法,向GetSaveInfo中传入什么都没问题,此处传入Volume(0),是因为Volume(0)是系统盘根目录,只要不是无盘工作站之类,这个FolderItem都不会为Nil,而且它的“位置”通常极少可能会改变。

因此在REAL Studio中首选应该保存SaveInfo而不是AbsolutePath。这样至少在Mac上,不会由于文件移动或更名而找不到。大部分Mac软件的Open Recent子菜单都不会由于文件被移动而无效,但一些只追求跨平台而忽视native特性的公司的产品或许会这样,比如Adobe的一些软件。


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: -11 | 查看次数: 4894
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 500 字 | UBB代码 关闭 | [img]标签 关闭