文件服务器会话 在连接和关闭RFs之间,可以使用它打开任意数量的 文件或目录,或执行其他与文件相关的操作。如果愿意, 你可以在应用程序的生存期保持文件服务器会话打开。 更可取的方式是,在关闭会话之前,确保正确关闭基于 文件的所有打开资源。在任何情况下,当关闭会话时服 务器将清除所有与会话关联的服务器端资源。 事实上,在GUI应用程序中,不需要打开文件服务器 会话,由于控件环境己经有一个打开的RFs,可以使用 iCoeEnv->FsSession()访问它。打开文件服务器会话是 一 种开销较高的操作,因此只要有可能,应该使用现有 的会话,而不是创建自己的会话
11 文件服务器会话 在连接和关闭RFs之间,可以使用它打开任意数量的 文件或目录,或执行其他与文件相关的操作。如果愿意, 你可以在应用程序的生存期保持文件服务器会话打开。 更可取的方式是,在关闭会话之前,确保正确关闭基于 文件的所有打开资源。在任何情况下,当关闭会话时服 务器将清除所有与会话关联的服务器端资源。 事实上,在GUI应用程序中,不需要打开文件服务器 会话,由于控件环境已经有一个打开的RFs,可以使用 iCoeEnv->FsSession()访问它。打开文件服务器会话是 一种开销较高的操作,因此只要有可能,应该使用现有 的会话,而不是创建自己的会话
文件服务器会话 RFs类提供与文件系统相关的许多有用操作,包括: 创建、移除和重命名目录,分别使用MkDir()、 MkDirA11()、RmDir(O和Rename()。 使用Delete)和Rename)删除或重命名文件。 通过Att()、SetAtt()、Modified()和 SetModified()读出和更改目录、文件属性。 。 使用NotifyChange()(和NotifyChangeCancel()) 通知更改。 使用Drive()、SetDriveName()、Volume()和 SetVolumeLabel()操作驱动器和卷。 通过使用ReadFileSection(),在不打开文件情况 下查看文件数据
12 文件服务器会话 RFs类提供与文件系统相关的许多有用操作,包括: • 创建、移除和重命名目录,分别使用MkDir()、 MkDirAll()、RmDir()和Rename()。 • 使用Delete()和Rename()删除或重命名文件。 • 通过Att()、SetAtt()、Modified()和 SetModified()读出和更改目录、文件属性。 • 使用NotifyChange()(和NotifyChangeCancel()) 通知更改。 • 使用Drive()、SetDriveName()、Volume()和 SetVolumeLabel()操作驱动器和卷。 • 通过使用ReadFileSection(),在不打开文件情况 下查看文件数据
文件服务器会话 ·使用AddFileSystem()、MountFileSystem()、 DismountFileSystem()和RemoveFileSystem(O添加和 移除文件系统。 Symbian OS SDK中说明了这些函数及其用法。 大多数与RFs相关的函数无状态,换句话说,函 数调用的结果不依赖以前调用的任何函数。这就是为 什么通常可以为了自己的目的使用该控件环境的RFs。 然而,RFs的确有一个状态项:它的当前目录。当打 开RFs时,它的当前目录通常设置为c:\,但是,可 以使用SetSessionPath(O更改一个打开RFs使用的当 前目录,或者使用SetDefaultPath()更改初始全部未 来RFs对象的当前目录
13 文件服务器会话 • 使用AddFileSystem()、MountFileSystem()、 DismountFileSystem()和RemoveFileSystem()添加和 移除文件系统。 Symbian OS SDK中说明了这些函数及其用法。 大多数与RFs相关的函数无状态,换句话说,函 数调用的结果不依赖以前调用的任何函数。这就是为 什么通常可以为了自己的目的使用该控件环境的RFs。 然而,RFs的确有一个状态项:它的当前目录。当打 开RFs时,它的当前目录通常设置为c:\,但是,可 以使用SetSessionPath()更改一个打开RFs使用的当 前目录,或者使用SetDefaultPath()更改初始全部未 来RFs对象的当前目录
文件服务器会话 当前日录包括驱动器以及目录名。因此,与D0S不同, 没有每个驱动器一个当前目录的概念。 如果操作当前目录或依赖当前目录,确保使用自己 的RFs,而不使用共享RFs。在这种情况下,必须处理与 会话关联的错误。如何处理它们依赖于会话如何存储。 如果它在一个类中声明为成员数据,使用包含如下所示 代码行的类定义: RFs iFs; 然后,只需使用如(一)圮码连接文件会话(从允许退出 的函数): User:LeaveIfError(iFs,Connect()); 同时在类析构函数中按下面代码关闭会话: iFs.Close (
14 文件服务器会话 当前日录包括驱动器以及目录名。因此,与DOS不同, 没有每个驱动器一个当前目录的概念。 如果操作当前目录或依赖当前目录,确保使用自己 的RFs,而不使用共享RFs。在这种情况下,必须处理与 会话关联的错误。如何处理它们依赖于会话如何存储。 如果它在一个类中声明为成员数据,使用包含如下所示 代码行的类定义: RFs iFs; 然后,只需使用如㈠圮码连接文件会话(从允许退出 的函数): User::LeaveIfError(iFs,Connect()); 同时在类析构函数中按下面代码关闭会话: iFs.Close ()
文件服务器会话 另一种方案是,在栈上声明文件服务器会话,此时 需要更加小心。需要将该会话放在清除栈上,最好的方 法是使用清除栈的CleanupClosePushL(),如下所示: RFs myFs; User:LeaveIfError (myFs.Connect()); CleanupStack:CleanupClosePushL(myFs); /可能退出的文件会话操作 CleanupStack:PopAndDestroy () 记住,连接文件服务器会话是开销大、耗时的操作 因此除非有充足的理由不共享控件环境中存在的会话, 否则均应该这么做
15 文件服务器会话 另一种方案是,在栈上声明文件服务器会话,此时 需要更加小心。需要将该会话放在清除栈上,最好的方 法是使用清除栈的CleanupClosePushL(),如下所示: RFs myFs; User::LeaveIfError (myFs.Connect()); CleanupStack::CleanupClosePushL(myFs); … //可能退出的文件会话操作 … CleanupStack::PopAndDestroy (); 记住,连接文件服务器会话是开销大、耗时的操作, 因此除非有充足的理由不共享控件环境中存在的会话, 否则均应该这么做