Symbian中IP地址类型为TInetAddr,它继承自TBuf8<KMaxSockAddrSize>,是普通的socket server地址类TSockAddr的特殊类。
TInetAddr的赋值采取下面的方法:
TInetAddr iIPAddress; const KFirewallRuleIPAddress = 10 ; iIPAddress.SetAddress( INET_ADDR( KFirewallRuleIPAddress, KFirewallRuleIPAddress, KFirewallRuleIPAddress, KFirewallRuleIPAddress ) ) 开始我没有找到使用FileStream存取IP地址的方法,所以只好把IP地址声明成了TBuf类型,因为我知道TBuf的存取方法。但是后来看到TInetAddr是TBuf8的子类,想想其存取方法应该和TBuf的一样,所以经过不断的摸索找到了正确的方法(其实不断的摸索,主要的原因是把TUint8*写成了TUint16*,导致老是无法正确的读取IP地址)。
用RFileWriterStream来写IP地址:
1 RFs iFs ; 2 User::LeaveIfError(iFs.Connect()) ; 3 RFileWriteStream writer; 4 writer.PushL(); 5 User::LeaveIfError(writer.Replace(iFs, KFirewallRuleFileName, EFileWrite)); 6 TInet len = 0 ; 7 len = rule.iIPAddress.Length(); 8 writer.WriteInt32L(len); 9 if(len) writer.WriteL(rule.iIPAddress.Ptr(), len ) ; 10 writer.CommitL(); 11 CleanupStack::PopAndDestroy(); 12 iFs.Close() ; 13 第7行获得IP地址的长度,其实本长度是固定的12个字节,不保存也可以。 第8行将其长度写入文件中。 第9行保存IP地址到文件中。
用RFileReaderStream来读IP地址:
1 RFs iFs ; 2 User::LeaveIfError(iFs.Connect()) ; 3 RFileWriteStream writer; 4 writer.PushL(); 5 User::LeaveIfError(writer.Replace(iFs, KFirewallRuleFileName, EFileRead)); 6 TInet len = 0 ; 7 len = reader.ReadInt32L(); 8 if(len) reader.ReadL((TUint8*)rule.iIPAddress.Ptr(), len ) ; 9 rule.iIPAddress.SetLength(len) ; 10 CleanupStack::PopAndDestroy(); 11 iFs.Close() ; |