当前位置:编程学习 > wap >>

symbian ini 文件的问题

现在对INI文件有了初步了解,但是有几个疑问,想请教一下高手:
我知道INI文件的大致格式
[user1]
name=admin
pwd=123
[user2]
name=sun
pwd=564
[user3]
name=haha
pwd=585

1、我们是怎么往INI里写的呢?我看了网上的例子,用流写入,可是我觉得那样不就相当于向一个TXT里写东西吗,和INI都没有什么关系啊,
我们的程序应该怎么写INI文件?不是调用write第一行写“[user1]”,然后再在第二行写“name=admin”,我觉得这和写文件一样,还叫所谓的写INI文件干嘛
2.、每个小节都该有个ID吧,这个ID是怎么加的,不会是写的时候的流ID吧
3、INI文件怎么读啊?我要读 name=haha pwd=585,是通过ID还是用FIND函数在整个文件中搜索到name=haha pwd=585来读取,这又和读一般的文件一样了。
其实,上面这些都可以归咎于一个迷惑,就是上面的INI文件,和与上面内容相同的TXT文件到底有什么区别,INI文件的优势在哪里,
多谢高人指教 --------------------编程问答-------------------- 系统对ini文件的操作都已经封装了一些方法了

void CIniFileEngine::ConstructL()
{
User::LeaveIfError(iFs.Connect());

iDicStore = CEikonEnv::Static()->EikAppUi()->Application()->OpenIniFileL(iFs);
}

void CIniFileEngine::WriteIniFileL(TUid aUid, const TDesC& aWriteBuffer)
{
RDictionaryWriteStream writeStream;

writeStream.AssignLC(*iDicStore, aUid);
writeStream << aWriteBuffer;
writeStream.CommitL();
CleanupStack::PopAndDestroy(); // writeStream

iDicStore->CommitL();
}

TBool CIniFileEngine::ReadIniFileL(TUid aUid, TDes& aReadBuffer)
{
TBool ret = EFalse;

if (iDicStore->IsPresentL(aUid))
{
RDictionaryReadStream readStream;

readStream.OpenLC(*iDicStore, aUid);
readStream >> aReadBuffer;
CleanupStack::PopAndDestroy(); // readStream
ret = ETrue; 
}

return ret;
}

上面是我自己定义的几个ini文件操作的主要接口。

下面是我我调用的例子
iIniEngine->WriteIniFileL( TUid::Uid( EIniUserId ), userId );
其中EIniUserId是自己定义的,这样就把userId的值写进Ini文件中。

读的时候
iIniEngine->ReadIniFileL( TUid::Uid( EIniUserId ), userId );
这样就根据EIniUserId的值把Ini文件中的用户编号读取到描述符userId中了。

使用这样的方式不是比你自己定义一个txt文件,不断的分析字段要好很多。

但是用Ini文件回带来一个问题,就是你每次执行ini的write,不管和ini中已经存在的值是否相同,操作都会添加数据,这样就会带来ini文件会越来越大的问题。 --------------------编程问答-------------------- 多谢楼上的回答,你的这些我都看明白了
但是我还是有疑问:
[user3]
name=haha
pwd=585
就像这个,我是怎么写进INI文件中啊?
第一行写“[user3]”
第二行写“name=haha”
第三行写“pwd=585”
这样的话岂不是每一行有个ID
可是,在INI文件中每一小节的ID应该是一样的啊 --------------------编程问答-------------------- 友情支持,三颗心关照,up~up~up~!! --------------------编程问答-------------------- 你是不是可以把一个用户所有的字段当成一个内容,然后uid用EUidUser3来表示 --------------------编程问答-------------------- 多谢各位回答,5楼的貌似可以,不过我是想问问专业的人士,他们到底是怎么做的? --------------------编程问答--------------------   等待中。。。希望有更好的解释。。。 --------------------编程问答-------------------- 以lz想破脑子也没发现ini和txt有什么区别,那就完全可以认为他们本质上没有任何区别。

本质上没区别,但像lz自己说的,ini是有格式规范的[section][key][value],那这个就是区别了,于是大概可以这么说:ini就是经过一定格式化的txt。

然后,比较ini和txt的优势,经过上面的分析,无非就是ini是格式化的,提供使用者方便的读写接口函数来访问不同section或者不同key的value。而对txt中字段的访问,是需要使用者自己一点一点去挖出来用,没有任何通用方法可拿来使用,txt内容排版变化了,读写的方法也就要随之改变才行。

假如lz自己定义个规范,放到txt文件中,然后再提供些通用标准的访问接口,那lz就可以把这个命名成一种独立格式,就不要叫什么ini了,什么都行,还可以去申请专利的。 --------------------编程问答-------------------- 楼上,我对INI和txt的区别还是知道的,但是对INI文件的整天操作还是不太清楚,请指教
[user3]
name=haha
pwd=585
就像这个,我是怎么写进INI文件中啊?
第一行写“[user3]”
第二行写“name=haha”
第三行写“pwd=585”
这样的话岂不是每一行有个ID
可是,在INI文件中每一小节的ID应该是一样的啊 --------------------编程问答-------------------- 根据[section][key][value]的规范在内存中排列好,然后再写入。 --------------------编程问答-------------------- 楼上还是没有说清楚
我的一节应该是一个ID吧
可是,我要读一节中的某个值怎么读,不会是要我先把整个小节读入内存然后,再查找吧
而且我写的时候要怎么写?
一小节一起写,还是一行一行的写?
一小节一起写,倒是符合,每小节一个ID,但是读的时候那就要一次读一小节了吧
我觉得正规的是可以读到某个小节的某个值的
我就这里不明白 --------------------编程问答--------------------
引用 10 楼 sanjiaomao003 的回复:
楼上还是没有说清楚
我的一节应该是一个ID吧
可是,我要读一节中的某个值怎么读,不会是要我先把整个小节读入内存然后,再查找吧
而且我写的时候要怎么写?
一小节一起写,还是一行一行的写?
一小节一起写,倒是符合,每小节一个ID,但是读的时候那就要一次读一小节了吧
我觉得正规的是可以读到某个小节的某个值的
我就这里不明白


楼主不是知道么?要么就是一整个用户信息对应一个id,取出来之后自己分析,要么就是每一个字段一个id,读得时候也是一个字段。

如果最多存储10个用户
第一种方法么就是10个不同id,比如0XFFF1-0XFFFA,像是一个一位数组。
如果用第二种方法,就是10×3的一个二维数组

这样能够直接读取到第几个用户的任何信息。但是楼主要是想根据name或者编号什么用来做索引,那估计就得逐个比较获取是第几个用户的信息了。
--------------------编程问答-------------------- 多谢楼上回答,我想我大致明白了
就是说,如果读取INI文件,每次只能读到某个ID下的所有内容,不能读取某个ID下的具体某个值,只好读出来再进行分析,多谢各位回答 --------------------编程问答-------------------- 看来symbian的ini文件和windows的不同呀。比windows的较费劲。
补充:移动开发 ,  Symbian
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,