标题对C++Builder文件操作类的改进
栏目软件世界
作者孙晓光
发布2001年23期
毋庸置疑C++ Builder是一个很好的软件开发平台,与Visual C++相比它的快速开发能力具有很大的优势。然而由于C++ Builder的VCL库的精简性因而在进行文件操作时不太方便。比如,在进行逗号分隔文本文件的流式操作时无直接对应的类来实现功能,而逗号分隔文本文件在简单程序中还是很有用处的,为此我在VCL的TFileStream类的基础上建立了文本文件类TStdioFile以解决前面的问题。在TStdioFile类中我加入了两个成员函数用于对文本文件进行操作,这两个成员函数是unsigned int ReadItem(String & Buffer)和unsigned int WriteItem(String Buffer)。可以清楚看出ReadItem函数用于从逗号分隔文本文件中的当前位置读出由逗号分隔的文本,而WriteItem函数用于在文件当前位置处写入一段由逗号分隔的文本。程序可以经简单修改来支持更多的分隔类型如顿号、斜线等等。在使用中注意在写入最后一段文本后要执行一下TFileStream.Size来删掉最后一个无用的分隔符。
程序如下:
<StdioFile.h>
class TStdioFile: public TFileStream
{
public:
unsigned int ReadItem(String & Buffer);
unsigned int WriteItem(String Buffer);
TStdioFile(AnsiString FileName,unsigned short Mode);
}
<StdioFile.cpp>
TStdioFile::TStdioFile(AnsiString FileName,unsigned short Mode):TFileStream(FileName,Mode)
{
}
unsigned int TStdioFile::ReadItem(String & Buffer)
{char * pTempBuffer = new char;
String Temp = "";
unsigned short nBytesRead = 0;
unsigned int nBytes = 0;
nBytesRead = Read(pTempBuffer,1);
while (* pTempBuffer != ',' &&(Position < Size))
Temp += * pTempBuffer;
nBytesRead = Read(pTempBuffer,1);
nBytes++;
};
if (Position == Size) Temp += * pTempBuffer;
Buffer=Temp;
return(nBytes);
}
unsigned int TStdioFile::WriteItem(String Buffer)
{char * pTempBuffer;
unsigned int nBytes = 0;
for (pTempBuffer = Buffer.c_str();*pTempBuffer != NULL; pTempBuffer++){
Write(pTempBuffer,1);
nBytes++;
};
* pTempBuffer = 44;
Write(pTempBuffer,1);
return(nBytes);
}