brew中对文件操作需要用到的API有:IFileMgr,IFile。IFileMgr用于创建实例,创建、打开文件;IFile负责读、写。
本例子包含以下功能(对txt文件):
1.检查文件是否存在,若存在,打开;不存在,创建。
2.写入信息;
3.读出信息。
1.创建名为myfile的brew工程以及mif文件;
//创建工程时,钩选File权限
//mif文件的权限栏中,钩选File
2.在结构体定义中添加IFileMgr和IFile的指针变量;
3.在myfile_InitAppData中创建IFileMgr实例,处理异常;
4.在myfile_HandleEvent中的EVT_APP_START下添加功能入口函数start;
//在start里完成对文件的操作,如下
5.用IFILEMGR_Test得知文件是否存在;
6.用IFILEMGR_OpenFile获得IFile指针,存在则用“读写模式”,不存在用“创建模式”
7.判断IFile指针是否为空,不为空则用IFILE_Write写入;
8.检查IFILE_Write的返回值,确定写入是否成功;
9.若成功,用IFILE_Read读出信息
//读出的长度参数为IFILE_Write的返回值
10.在myfile_FreeAppData中释放IFileMgr和IFile。
以上是个简单的步骤,用于大家熟悉IFile的工作机制。下面来说说实际中可能的需求怎么实现:
1.对多个文件操作
只创建一个IFileMgr实例即可,再根据它创建多个IFile
2.读取一行
先把文件的内容全部读出(IFile_Read的长度参数设大点),存到pbuf[],然后通过查找字符串中的标志字符,为“行结束”定位(如/r/n),从而得到一行的值
如果可以控制,最好约定文件内容的格式,那么只需要操作pbuf数组即可,简单许多
若一次读不完,要用IFILE_Seek移动IFile指针的位置
3.写入一行
如果想每次写入一行,但又不确定写入的信息结尾是否有/n,可以在写入信息之前先写入一个/n
4.只读不写
首先IFILEMGR_Test,失败说明文件不存在,返回即可
IFile_Open用“只读模式”
5.文件的路径
默认是在本工程文件夹。大部分手机上,扩展存储都会远远大于本机存储,如果brew程序有纪录的功能,就需要更大的存储空间。在MifEditor里和“权限”同级别的一栏可以设置在其他盘读写的权限。有点微妙,有时候显示,有时候不显示。同学们用心找找,总有一天会碰着的:)
6.检查磁盘是否存满
当然,如果磁盘满了,肯定就写不进去了。但也会死机,这是绝对不可以出现的。我们可以通过3种方法得到当前文件的大小:累加write的返回值;用IFILE_GetInfo得到FileInfo结构,其中有文件大小(如果仅仅想得到文件大小,不推荐使用IFILE_GetInfoEx,因为它返回AEEFileInfoEx结构体,很大);在没有打开文件的情况下,用IFILEMGR_GetInfo得到文件大小(不推荐IFILEMGR_GetInfoEx,理由同上)。
7.不合作的模拟器
写入在模拟器上是无法完成的,一执行就失败。在手机上可以正常工作。所以,大家要自信。
读出在模拟器上没问题。
改变默认路径,操作扩展卡,好像在模拟器上也是无法完成的,连创建文件都失败。原因查找中...