作业帮 > C/C++ > 教育资讯

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

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 07:39:11 C/C++
C++中随机存取文件的处理[1]C/C++
【无忧考网 - C/C++】
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;

  }

这段代码显示了一个简单的打开待写的二C/C++