在阅读代码时,遇到了非常早之前用过的fseek(),非常久没实用了,有点陌生,写出来以便下次查阅。
函数功能是把文件指针指向文件的开头,须要包括头文件stdio.h
fseek
#include <stdio.h> long filesize(FILE *stream); int main(void) { FILE *stream; stream = fopen("MYFILE.TXT", "w+"); fprintf(stream, "This is a test"); printf("Filesize of MYFILE.TXT is %ld bytes ", filesize(stream)); fclose(stream); return 0; } long filesize(FILE *stream) { long curpos, length; curpos = ftell(stream); fseek(stream, 0L, SEEK_END); length = ftell(stream); fseek(stream, curpos, SEEK_SET); return length; }
#include <stdio.h> #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename, STU n) { FILE *fp; fp = fopen(filename, "rb+"); fseek(fp, -1L*sizeof(STU),SEEK_END); fwrite(&n, sizeof(STU), 1, fp); fclose(fp); } void main() { STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88}, {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, {10005,"ZhangSan", 95, 80, 88}}; STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N]; int i,j; FILE *fp; fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); printf(" The original data : "); for (j=0; j<N; j++) { printf(" No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++)
printf("%6.2f ", ss[j].score[i]); printf(" "); } fun("student.dat", n); printf(" The data after modifing : "); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; j<N; j++) { printf(" No: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++)
printf("%6.2f ", ss[j].score[i]); printf(" "); } }