day14: 文件读写操作
This commit is contained in:
parent
5408f0b622
commit
048a4d83ac
|
@ -19,3 +19,5 @@
|
|||
#### day12: 字符串处理函数,const,结构体
|
||||
|
||||
#### day13: 结构体,位域,共用体,枚举,链表操作
|
||||
|
||||
#### day14: 文件读写操作
|
||||
|
|
BIN
day14/a.out
BIN
day14/a.out
Binary file not shown.
|
@ -0,0 +1,36 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
// 实现读取 filepath 文件的前 top_n 行数据
|
||||
void *read_top_line(const char *filepath, int top_n)
|
||||
{
|
||||
FILE *f = fopen(filepath, "r");
|
||||
if (NULL == f)
|
||||
{
|
||||
perror("fopen");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char(*lines)[100] = calloc(top_n, 100);
|
||||
for (int i = 0; i < top_n; i++)
|
||||
{
|
||||
char *flag = fgets(lines[i], 100, f);
|
||||
if (flag == NULL)
|
||||
break;
|
||||
}
|
||||
fclose(f);
|
||||
return lines;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int n = 5;
|
||||
char(*p)[100] = read_top_line("d10.txt", n);
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
printf("第 %d 行: %s", i + 1, *(p + i));
|
||||
}
|
||||
free(p);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
hello,world
|
||||
张三
|
||||
爱唱歌
|
||||
lihai
|
||||
hahaha
|
||||
手机
|
|
@ -0,0 +1,22 @@
|
|||
#include <stdio.h>
|
||||
|
||||
// 文件复制
|
||||
int main()
|
||||
{
|
||||
FILE *aF = fopen("d11.txt", "r");
|
||||
if (NULL == aF)
|
||||
{
|
||||
perror("fopen");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *bF = fopen("d11_cpy.txt", "w");
|
||||
int c;
|
||||
while ((c = fgetc(aF)) != EOF)
|
||||
{
|
||||
fputc(c, bF);
|
||||
}
|
||||
fclose(aF);
|
||||
fclose(bF);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
hello,world
|
||||
张三
|
||||
爱唱歌
|
||||
lihai
|
||||
hahaha
|
||||
手机
|
|
@ -0,0 +1,6 @@
|
|||
hello,world
|
||||
张三
|
||||
爱唱歌
|
||||
lihai
|
||||
hahaha
|
||||
手机
|
|
@ -0,0 +1,22 @@
|
|||
#include <stdio.h>
|
||||
|
||||
// 二进制文件复制
|
||||
int main()
|
||||
{
|
||||
FILE *aF = fopen("d12.jpg", "rb");
|
||||
if (NULL == aF)
|
||||
{
|
||||
perror("fopen");
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *bF = fopen("d12_cpy.jpg", "wb");
|
||||
int c;
|
||||
while ((c = fgetc(aF)) != EOF)
|
||||
{
|
||||
fputc(c, bF);
|
||||
}
|
||||
fclose(aF);
|
||||
fclose(bF);
|
||||
return 0;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
|
@ -0,0 +1,36 @@
|
|||
// 自定义二进制文件写入
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int sid;
|
||||
char name[32];
|
||||
int age;
|
||||
char sex[4];
|
||||
} STU;
|
||||
|
||||
int main()
|
||||
{
|
||||
STU s1 = {1, "disen", 20, "男"};
|
||||
STU s2 = {2, "jack", 18, "女"};
|
||||
STU *s3 = malloc(sizeof(STU));
|
||||
s3->sid = 3;
|
||||
strcpy(s3->name, "lily");
|
||||
s3->age = 19;
|
||||
strcpy(s3->sex, "女");
|
||||
|
||||
FILE *f = fopen("d13.txt", "wb");
|
||||
if (NULL == f)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
fwrite(&s1, sizeof(STU), 1, f);
|
||||
fwrite(&s2, sizeof(STU), 1, f);
|
||||
fwrite(&s3, sizeof(STU), 1, f);
|
||||
fclose(f);
|
||||
|
||||
return 0;
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1,28 @@
|
|||
// 自定义二进制文件读取
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int sid;
|
||||
char name[32];
|
||||
int age;
|
||||
char sex[4];
|
||||
} STU;
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *f = fopen("d13.txt", "rb");
|
||||
if (NULL == f)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
STU *s = malloc(sizeof(STU));
|
||||
fread(s, sizeof(STU), 1, f);
|
||||
printf("%d %s %d %s\n", s->sid, s->name, s->age, s->sex);
|
||||
free(s);
|
||||
|
||||
fclose(f);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
// 自定义二进制文件读取
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int sid;
|
||||
char name[32];
|
||||
int age;
|
||||
char sex[4];
|
||||
} STU;
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *f = fopen("d13.txt", "rb");
|
||||
if (NULL == f)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 让光标移动到文件尾部
|
||||
fseek(f, 0, SEEK_END);
|
||||
long file_size = ftell(f); // 获取文件大小
|
||||
printf("文件大小: %ld B\n", file_size);
|
||||
int stu_num = file_size / sizeof(STU);
|
||||
printf("学生数目: %d 位\n", stu_num);
|
||||
|
||||
fseek(f, 0, SEEK_SET); // 重置光标位置到头
|
||||
for (int i = 0; i < stu_num; i++)
|
||||
{
|
||||
STU *s = calloc(1, sizeof(STU));
|
||||
|
||||
int fx = fread(s, sizeof(STU), 1, f);
|
||||
if (fx != 0)
|
||||
printf("%d %s %d %s\n", s->sid, s->name, s->age, s->sex);
|
||||
free(s);
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 行缓冲区
|
||||
// 写数据时遇到换行符,则刷新缓冲
|
||||
// 如果行缓冲不刷新时,则不会输出结果。
|
||||
// 因为输出的内容没有遇到换行符(Linux `\n`), Window(`\r\n`)。
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("Hello World"); // 缓冲区未写满,不会刷新缓冲区,不会输出
|
||||
while (1)
|
||||
;
|
||||
|
||||
return 0; // 缓冲未写满,不会刷新缓冲区,不会退出程序
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i = 0;
|
||||
// 缓冲区一般为 4KB,这里写入 32B,不会刷新缓冲区
|
||||
char m[33] = "disenjackydisenjackydisenjackyab";
|
||||
|
||||
printf("%s", m);
|
||||
fflush(stdout); // 刷新缓冲区,目的是为了让缓冲区中的数据输出到屏幕上
|
||||
while (1)
|
||||
; // 用来观察程序退出时是否会刷新缓冲区,阻塞程序
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
// 程序正常退出也会刷新缓冲区,显示输出
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i = 0;
|
||||
// 缓冲区一般为 4KB,这里写入 32B,不会刷新缓冲区
|
||||
char m[33] = "disenjackydisenjackydisenjackyab";
|
||||
|
||||
printf("%s", m);
|
||||
;
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
// 读写文本文件
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
char *f = (char *)malloc(100);
|
||||
FILE *fp = fopen("d5.txt", "w");
|
||||
if (fp == NULL)
|
||||
{
|
||||
perror("fopen");
|
||||
exit(1);
|
||||
}
|
||||
fputs("disen", fp);
|
||||
fclose(fp);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
disen
|
|
@ -0,0 +1,13 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *f = fopen("d6.txt", "a");
|
||||
// char content[20] = "hello disen";
|
||||
char *m = "小李";
|
||||
int n = fputs(m, f); // 单字符写入
|
||||
printf("已追加内容的结构 n = %d\n", n);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
hello disen
|
|
@ -0,0 +1,16 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *f = fopen("d7.txt", "r");
|
||||
char line[100] = "";
|
||||
|
||||
while (fgets(line, 100, f) != NULL)
|
||||
{
|
||||
printf("%s", line);
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
hello,world
|
||||
张三
|
||||
爱唱歌
|
|
@ -0,0 +1,18 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *f = fopen("d8.txt", "r");
|
||||
fseek(f, 3, SEEK_SET); // SEEK_SET 0
|
||||
char m[7];
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
m[i] = (char)fgetc(f);
|
||||
}
|
||||
m[6] = '\0';
|
||||
printf("%s\n", m);
|
||||
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
hello,world
|
||||
张三
|
||||
爱唱歌
|
|
@ -0,0 +1,21 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *f = fopen("d9.txt", "r");
|
||||
|
||||
int line1_n = 0;
|
||||
while (fgetc(f) != '\n')
|
||||
line1_n++;
|
||||
|
||||
fseek(f, line1_n + 1, SEEK_SET);
|
||||
|
||||
char line2[100];
|
||||
fgets(line2, 100, f);
|
||||
line2[strlen(line2) - 1] = '\0'; // 去掉换行符
|
||||
printf("line2: %s", line2);
|
||||
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
hello,world
|
||||
张三
|
||||
爱唱歌
|
Loading…
Reference in New Issue