一般在程序设计中的文件类型有两种:程序文件、数据文件。
程序文件:包括源程序文件(.c)、目标文件(.obj)、可执行文件(.exe)
数据文件:该文件的内容不是程序,而是程序运行时读写的数据。本篇博客就是对数据文件的操作的讨论。
struct _iobuf{char *_ptr;int _cnt;char *_base;int _flag;int _file;int _charbuf;int _bufsiz;char *_tmpfname;
};
typedef struct _iobuf FILE;
(1)数据文件的打开
(2)数据文件的关闭
//mode:打开方式
"r"(只读,覆盖写):为了输入数据,打开一个已经存在的文本文件。如果指定文件不存在则出错。"w"(只写):为了输出数据,打开一个文本文件。如果指定文件不存在则建立一个新的文件。"a"(追加写):向文本文件尾添加数据。如果指定文件不存在则出错。"rb"(只读,覆盖写):为了输入数据,打开一个二进制文件。如果指定文件不存在则出错。"wb"(只写):为了输出数据,打开一个二进制文件。如果指定文件不存在则建立一个新的文件。"ab"(追加写):向一个二进制文件尾添加数据。如果指定文件不存在则出错。"r+"(读写):为了读和写,打开一个文本文件。如果指定文件不存在则出错。"w+"(读写):为了读和写,建立一个新的文件。如果指定文件不存在则建立一个新的文件。"a+"(读写):打开一个文件,在文件尾进行读写。如果指定文件不存在则建立一个新的文件。"rb+"(读写):为了读和写打开一个二进制文件。如果指定文件不存在则出错。"wb+"(读写):为了读和写,新建一个新的二进制文件。如果指定文件不存在则建立一个新的文件。"ab+"(读写):打开一个二进制文件,在文件尾进行读和写。如果指定文件不存在则建立一个新的文件。
#include <stdio.h>int main()
{FILE *pf;pf = fopen(", "w");//以只写模式打开,若不存在该文件则创建。if (pf != NULL){fclose(pf);}return 0;
}
(1)数据文件的顺序读写
①fgetc
#include <stdio.h>int main()
{FILE *pf;int c;pf = fopen(", "r");//以只读模式打开,上面已经创建了该文件。while ((c = fgetc(pf)) != EOF){printf("%c ", c);}printf("n");fclose(pf);return 0;
}
②fputc
#include <stdio.h>int main()
{FILE *pf;int c;pf = fopen(", "a");//以追加写模式打开,上面已经创建了该文件。fputc('I', pf);fclose(pf);pf = fopen(", "r");//以只读模式打开while ((c = fgetc(pf)) != EOF){printf("%c ", c);}printf("n");fclose(pf);return 0;
}
③fgets
#include <stdio.h>int main()
{FILE *pf;char str[100];pf = fopen(", "a");//以追加写模式打开,上面已经创建了该文件。fputc('I', pf);fclose(pf);pf = fopen(", "r");//以只读模式打开fgets(str, 12, pf);puts(str);fclose(pf);return 0;
}
④fputs
#include <stdio.h>int main()
{FILE *pf;char str[100];pf = fopen(", "a");//以追加写模式打开,上面已经创建了该文件。fputs(" am sheena", pf);fclose(pf);pf = fopen(", "r");//以只读模式打开fgets(str, 22, pf);puts(str);fclose(pf);return 0;
}
⑤fprintf
#include <stdio.h>int main()
{FILE *pf;pf = fopen("mytest.c", "w");fputc('s', pf);fputs("nsheenan", pf);fprintf(pf,"语文:%dn数学:%dn英语:%dn", 98, 110, 99);fclose(pf);return 0;
}
⑥fscanf
#include <stdio.h>int main()
{FILE *pf;int a, b, c;pf = fopen("mytest.c", "r");fscanf(pf,"语文:%dn数学:%dn英语:%dn", &a, &b, &c);printf("%d,%d,%dn", a, b, c);fclose(pf);return 0;
}
⑦fread
⑧fwrite
#include <stdio.h>
#include <string.h>
#include <assert.h>struct TelInfo
{char _name[24];char _tel[16];int _age;
};
char *my_itoa(int n, char* buf)
{assert(buf);int i = 0;while (n){buf[i] = n % 10 + '0';n /= 10;++i;}int begin = 0, end = i - 1;while (begin < end){char tmp = buf[end];buf[end] = buf[begin];buf[begin] = tmp;++begin;--end;}buf[i] = '