微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题对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);
  }