全站搜索未启用
跳到主要内容

文本五:二进制文件的访问操作

1.访问二进制文件的读写函数格式

向二进制文件读出和写入信息的函数原型:

unsigned int fread(void* buffer,unsigned int num,

      unsigned int count, FILE* stream);

unsigned int fwrite(const void* buffer, unsigned int num,

      unsigned int count, FILE* stream);

参数说明:buffer、num、count、stream

fread()函数功能:从stream文件流所表示文件中,当前读指针位置开始读出num * count个字节的信息块,把它保存到由buffer所指向的变量或数组空间中。

fwrite()函数功能:把从buffer所指向的变量或数组空间中,num*count个字节的内容取出来,写入到由文件流stream所表示的文件中,从文件中当前写指针位置起向后存放。

格式举例:

  struct AAA {char na[20]; int ga;};   //定义结构类型

  struct AAA x1={"wangqiang",30};     //定义结构变量并初始化

  fwrite(&x1,sizeof(struct AAA),1,fout); //写二进制文件的操作

2.移动文件读写指针位置的系统函数

stream参数给出要进行访问操作的文件流。

origin参数必须是SEEK_SET、SEEK_CUR和SEEK_END之一。

num给出移动读或写指针位置的位移量。

若读写位置移动成功,则返回0,否则返回非0。

例如: fseek(fio, 20, SEEK_SET); //读或写文件指针后移20个字节

3.进行二进制文件操作举例

编写一个程序,首先利用48、62、25、73、66、80、78、54等8个整数初始化一个整型数组a[8],接着把a[8]中的每个元素值依次写入到二进制文件“d:\\xxk\\data1.bin”中,然后再对数组a[8]中的元素进行升序排列,最后把排序结果再一次写入到上述二进制文件中。

分析:打开给定文件,写入数组到文件,对数组排序,再写入数组到文件。

void selectSort(int a[], int n) {

    //采用选择排序方法进行数组排序

  int i,j,k,x;

  for(i=1; i<n; i++) {

    k=i-1;

    for(j=i; jlt;n; j++) if(a[j]lt;a[k]) k=j;

    x=a[i-1]; a[i-1]=a[k]; a[k]=x;

  }

}

#include<stdio.h>

#include<stdlib.h>

#define N 8

int a[N]={48,62,25,73,66,80,78,54};

char *fn="d:\\xxk\\data1.bin";

void selectSort(int a[], int n);

void main(void) {

 int i;

 FILE* fp1=fopen(fn, "wb");

 if(!fp1){printf("Err!");exit(1);}

 for(i=0; i<N; i++) fwrite(&a[i],sizeof(int),1,fp1);

 selectSort(a,N);

 fwrite(a, sizeof(int), N, fp1);

 fclose(fp1);

}

 文件数据:48 62 25 73 66 80 78 54 25 48 54 62 66 73 78 80

 若在上述主函数的第6条和第7条语句之间加入下面两条语句:

   fseek(fp1,N*sizeof(int),SEEK_SET);

   fwrite(&x, sizeof(int), 1, fp1);

 文件数据:48 62 25 73 66 80 78 54 54 48 54 62 66 73 78 80

最后修改: 2019年09月26日 Thursday 19:17