趣学 C 语言(七)—— 文件读写操作
来源:互联网 发布:window10下安装ubuntu 编辑:程序博客网 时间:2024/05/02 06:10
- (1)
rewind
:函数把文件内部位置指针移到文件首; - (2)
fseek
:移动文件流的读写位置;
1. 字符读写函数 :fgetc和fputc
在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。
在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后, 该位置指针将向后移动一个字节。 因此可连续多次使用fgetc函数,读取多个字符。 应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
FILE *fp assert(fp = fopen("", "rb"));char ch;ch = fgetc(fp);while (ch != EOF){ putchar(ch); // 屏幕上显示 ch = fgetc(fp);} // #define EOF (-1)
assert(fp = fopen("", "wt+"));printf("input a string: \n");char ch;ch = getchar();while (ch != '\n'){ fputc(ch, fp); ch = getchar();}
一个小案例
把命令行参数中的前一个文件名标识的文件, 复制到后一个文件名标识的文件中, 如命令行中只有一个文件名则把该文件写到标准输出文件(显示器)中。
typedef FILE* FP;FP fp1, fp2;assert(fp1 = fopen(argv[1], "rb"));if (argc == 2) fp2 = stdout;else fp2 = fopen(argv[2], "wt+");char ch;while ((ch = fgetc(fp1)) != EOF) fputc(ch, fp2);fclose(fp1);fclose(fp2);
2. 字符串读写函数:fgets和fputs
读字符串函数 fgets
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名, n, 文件指针);
其中的 n 是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'
。例如:fgets(str,n,fp);
的意义是从fp
所指的文件中读出n-1个字符送入字符数组str
中。
FILE *fp;char str[11];assert(fp = fopen("....", "rb"));fgets(str, 11, fp); // 只传递 10 个元素,第11个为 '\0',标识结束
3. 数据块读写函数:fread和fwrite
fread(buffer,size,count,fp); // size 表示字节数 // count 数据块块数fwrite(buffer,size,count,fp);
fread(fa,4,5,fp);
其意义是从fp
所指的文件中,每次读 4 个字节(一个实数)送入实数组fa
中,连续读 5 次,即读 5 个实数到 fa 中。
实现如下功能:从键盘输入两个学生数据,写入一个文件中, 再读出这两个学生的数据显示在屏幕上。
struct Stu{ int id; char name[10]; int age; char addr[12];} boys[2], copy[2], *pp, *qq;pp = boys; qq = copy;FILE *fp;assert(fp = fopen("...", "wt+"));int i;for (i = 0; i < 2; ++i, ++pp) scanf("%d %s %d %s", &pp->id, pp->name, &pp->age, pp->addr);pp = boys;fwrite(pp, sizeof(struct Stu), 2, fp);rewind(fp);fread(qq, sizeof(struct Stu), 2, fp);for (i = 0; i < 2; ++i, ++qq) printf("id: %d, name: %s, age: %d, addr: %s\n", qq->id, qq->name, qq->age, qq->addr);fclose(fp);
4. 格式化读写函数:fscanf和fprinf
fscanf 函数,fprintf 函数与前面使用的 scanf 和 printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf 函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:
fscanf(fp, "%d %s", &i, s);fprintf(fp, "%d %c", j, ch);
struct Stu{ int id; char name[10]; int age; char addr[20];} boys[2], copy[2], *pp, *qq;pp = boys; qq = copy;FILE *fp;assert(fp = fopen("...", "wt+"));// 从控制台格式化输入到结构体int i;for (i = 0; i < 2; ++i, ++pp) scanf("%d %s %d %s", &pp->id, pp->name, &pp->age, pp->addr);pp = boys;// 格式化输出到文件for (i = 0; i < 2; ++i, ++pp) fprintf(fp, "%d %s %d %s\n", pp->id, pp->name, pp->age, pp->addr);rewind(fp);// 从文件格式化输出到结构体for (i = 0; i < 2; ++i, ++qq) fscanf(fp, "%d %s %d %s", &qq->id, qq->name, &qq->age, qq->addr);qq = copy;// 从结构体输出到控制台for (i = 0; i < 2; ++i, ++qq) printf("%d %s %d %s\n", qq->id, qq->name, qq->age, qq->addr);fclose(fp);
- 趣学 C 语言(七)—— 文件读写操作
- 趣学 C 语言(十二)—— 文件操作
- C语言——文件读写操作
- C语言文件读写操作
- C语言文件读写操作
- c语言读写文件操作
- c语言文件读写操作
- c语言文件读写操作
- C语言文件读写操作
- C语言文件读写操作
- C语言文件读写操作
- C语言文件读写操作
- C语言 文件读写操作
- C语言文件读写操作
- C语言文件读写操作
- C语言文件读写操作
- C 语言学习笔记(七)——文件操作(2)
- C语言文件操作----文件的读写
- 苏宁易购亿万级商品评价系统的架构演进之路和实现细节
- MAKEWORD
- mac 系统不区分大小写,linux 服务器区分大小写
- Java的8大排序算法
- 面试笔试题4--如何判断主机是大端小端?
- 趣学 C 语言(七)—— 文件读写操作
- hibernate id生成策略
- pcap文件格式
- TS流解析
- 另类新浪微博基本数据采集方法(值得深思)
- mysql不能存储中文的问题
- linux系统--文件目录
- java 工程师 基础知识总结
- ARP地址解析过程(同一子网和不同子网)