symbian下的文件操作

来源:互联网 发布:java的数据结构和算法 编辑:程序博客网 时间:2024/05/17 06:11
 Symbian中的文件操作

本文介绍Symbian中的文件操作。

其实这方面的操作相对于Symbian的某些其他部分来说还是跟其他平台比较类似的,并无太大的不同。从最訽始的Standard C中的FILE结构到C++中的stream,再到目前的各种各样的流行的语言、脚本什么的,对文件的操作无非是打开一个用字符串指定文件名的文件,给出打开方式(Binary or Text, Read or Write),然后获得“文件对象”,你可以当作这个文件的实例或者句柄什么的(Instance or Handle),知道意思就行了,反正就是这么一回事;p?_?_在我们目前的面向对象程序中,如果要对文件进行读取或者写入等操作,无非就是调用在这个文件对象各种过程,比如写入,读取,Seek,之类的,等到用完了文件再用Close之类的过程关闭它以释放资源。这个就是我们编成的时候大致的操作文件的抽象描述。Symbian在这方面与其他平台并无太大差别。

下面结合Code说说具体的操作:
上面说了Symbian在文件操作方面与其他平台差别不大,但是全无差别也是不可能的。因为Symbian系统是为资源受限设备设计的,这一点我相信大家都听得耳朵起糨子了-_-,所以他的文件资源也是由系统管理的,我们要通过建立FileServer来与系统的文件服务通信,以建立客户端--服务器模式来访问文件。说了那么玄,其实很简单地,也就是说我们在纯粹的使用文件部分的时候,之前要Connet一下FileServer,之后要Close一下FileServer,就这么简单。如:

RFs fs;
User::LeaveIfError(fs.Connect());
/*
* Your File Manipulatating Code Here...
*/
fs.Close();

我的Code其实并不好,如果是Symbian老手,我相信即使是简单的fs.Connect();也会有随后马上进行的CleanupStack类的操作,只是我目前还不熟悉,不敢妄自误导大众~~
下面的就是文件了,我们在Symbian中使用的比较“低级”或者说“底层”的訽始文件对象是通过RFile类来实现的,大家只要参考一下DeveloperLibrary的这个部分就清楚了,位置是:(Developer Library >> API Reference >> C++ API reference >> File Server Client Side >> RFile)
下面给两个例子,来说明一下文件的打开,关闭,读,写,Seek等操作。

RFs fs;
User::LeaveIfError(fs.Connect());
RFile file
User::LeaveIfError(file.Open(fs, _L("C://file.foo"), EFileWrite));
TBuf8<256> buf;
file.Read(buf, 256);
file.Seek(ESeekStart, 911);
file.Write(_L8("Some thing you wanna write..."));
file.Close();
fs.Close();

注:以上代码没有綺过测试,没有綺过编译检查,但是綺过了对照SDK DeveloperLibrary的检查,技术上应该不会有什么问题。有两点要说明的,在程序中写死(HardCode)变量长度和位置什么东西还是最好用MACRO代替,这可能是所有programmer的常识了,我并不是在教大家而是指名我的实例代码中的不足;另一点就是_L8(), _L()这两个MACRO是Symbian不支持大家再使用的了,大家最好用_LIT()或者_LIT8()来代替好了,此处仅仅为了方便使用了一下。

大家可以很容易从DeveloperLibrary看出,RFile支持的读写只有TDes8这种类型,也就是说它只能以byte,或byte数组的形式写入或者读出数据。如果大家想使用文本文件或者二进制数据文件的话,就要借助更高级的文件类了,他们的使用方法仍然是大同小异。
TFileText提供了文本文件的读写,从他的API Reference中很容易看出来,在我们建立好的TFileText对象上,只要Set一个RFile到它本身上面,我们就可以用这个TFileText对象来很容易的对文件(就是底层的RFile)来进行文本文件的读写了。

与此类似,RFileReadStream对象,在构造的时候只需指明构建在哪个RFile对象上,我们就可以方便的在这个RFile对象上进行数据的操作,比如读出一个32bit的整数,读出一个64比特实型数。RFileWriteStream进行的是写入方面的操作,操作方式与读入类相同,就不赘述了。

从上面的例子和说明我们可以看出,Symbian系统的文件操作几乎与其他平台没什么太大的不同,也是符合所有的抽象文件操作要求的。对文件的操作只要我们看看DeveloperLibrary,记住几个常用的过程,就没有什么困难的了。

希望我写的文字能给大家带来些帮助!

为 kcomex 补充两点:
1、symbian的所有文件名中最好不好含有空格等特殊字符,负责编译可能出错,我用0.9SDK是这样的。
2、如果编译的时候出现了你不知道的文件夹,请将mmp文件所在的文件夹中的.bat和.inf文件删掉,用.mmp重新生成这两个文件。我一般都是使用mmpclick这个工具来生成的,因为命令行毕竟不方便。关于mmpclick的使用,在SDK附带的工具中有详细的说明。
原创粉丝点击