C++中随机存取文件的处理


在本文中,我们所讲的是怎样使用C++中的随机存取文件。除了最简单的应用程序以外,大多数程序都需要读写文件。或许只是为了读取一个配置文件,一个文本解析器或更为复杂的什么东西。和许多的C++程序一样,有些人更喜欢用原先的C语言方式处理问题,如果你恰好也是这些人中的一员,就应该学习一下这篇文章。

基本的文件操作有

·fopen——打开文件,指定文件以怎样的方式打开(读/写)以及类型(二进制/文本)
·fclose——关闭已经打开的文件
·fread——读取文件
·fwrite——写文件
·fseek/fsetpos——将文件指示器转移到文件中的某一地方
·ftell/fgetpos——可以告诉你文件指示器所在的位置

文件有两种基本类型:文本和二进制。在这两者之中,通常二进制类型是较容易解决的。由于在文本中处理随机存取并不常用,我们会在本文中重点关注二进制文件的处理。上面列出的操作中的前四项可用于文本文件和随机存取文件。后面的两项则仅用于随机存取。

随机存取意味着我们可以在文件的任意部分之间进行切换,且可以从中读写数据而不需要通读整篇文件。

二进制文件

二进制文件是任意长度的文件,它保存有从0到0xff(0到255)不等的字节值。这些字节在二进制文件中没有任何意义,与此不同的是,在文本文件中,值为13就意味着回车,10意味着换行,26意味着文件结束,而读取文本文件的软件要能够解决这些问题。
在现在的术语中,我们将二进制文件称为包含了字节的字符流,大多数语言倾向于将其理解为字符流而不是文件。重要的部分是数据流本身而不是其来源。在C语言中,你能从文件或数据流方面来考虑数据。或者,你可以将其理解为一组长的数组。通过随机存取,你可以读写数组的任意部分。

 例一:
  // ex1.c : Defines the entry point for the console application.
  //
  #include < stdio.h>
  #include < string.h>
  #include < windows.h>
  int FileSuccess(FILE * handle,const char * reason, const char * path) {
  OutputDebugString( reason );
  OutputDebugString( path );
  OutputDebugString(" Result : ");
  if (handle==0)
  {
  OutputDebugString("Failed");
  return 0;
  }
  else
  {
  OutputDebugString("Suceeded");
  return 1;
  }
  }
  int main(int argc, char * argv[])
  {
  const char * filename="test.txt";
  const char * mytext="Once upon a time there were three bears.";
  int byteswritten=0;
  FILE * ft= fopen(filename, "wb");
  if (FileSuccess(ft,"Opening File: ", filename)) {
  fwrite(mytext,sizeof(char),strlen(mytext), ft);
  fclose( ft );
  }
  printf("len of mytext = %i ",strlen(mytext));
  return 0;
  }

  • 1
  • 2
  • 3
  • 下一页

相关内容