
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