关于 Symbian 对文件的操作
2010-03-24 17:23:00 来源:WEB开发网文件操作当然包含文件读写咯,在此也作一下整理。
TFileText
Location: f32file.h
Link against: efsrv.lib
这个类是我最喜欢用的,因为它够简洁够方便。
处理单行的文本文件读写(单行最大256个字符),文件编码必须是UTF-16 LE。
提供的函数也少得可怜:Read(), Seek(), Set(), TFileText(), Write() 其中还有一个是默认构造函数,真是可怜无比。但是很实用就是了,在做Console Exe的时候,用这个类来读写文件那是相当爽快。没有调研过控制台程序是否也有支持ini文件的API,但是自己用TFileText写一个读写ini文件的类也是很方便的事。
伪代码如下:
TFileText ft; // you can also alloc ft with new operator
ft.Set(…);
TBuf<256> line; // you may want to use HBufC or RBuf…
while(KErrEof != ft.Read(line))
{
// your operation to line
}
…
ft.Write(…); // auto insert your TDesC into the new line
CLineReader
Location: VERSIT.H
Link against: versit.lib
类如其名,这个类只支持单行读,不支持写。不过用起来也不算太麻烦,因为是通过流读取的,所以没有单行256个字符的限制。
据我测试,文件编码必须是UTF-8 without BOM(就是文件头不带EFBBBF三个字节,这三个字节对于UTF-8编码来说不是必需的,但是Windows平台下的UTF-8编码文件都有这三个字节),UTF-16的貌似不支持,下次作一个详尽的测试。
示例代码:
RFs fs;
User::LeaveIfError(fs.Connect());
RFileReadStream fileReadStream;
fileReadStream.Open(fs,KConfigFilePath,EFileStreamText);
CLineReader* lineReader = CLineReader::NewL(fileReadStream);
TInt err(KErrNone);
while(true)
{
lineReader->ReadLineL(0,err);
if(KErrEof == err)
{
break;
}
// do sth with lineReader->iBufPtr
}
delete lineReader;
fileReadStream.Close();
更多精彩
赞助商链接