fopen、fgetc
#include <stdio.h>
int main()
{
// 使用fopen函数打开或者创建文件,返回文件指针
FILE * fp;
// 以只读的方式打开文件,如果文件不存在则报错
// fp = fopen("./file.txt","r");
// 以只写的方式打开文件,如果文件不存在则创建 ,如果文件存在则清空
// fp = fopen("./file.txt", "w");
// 以只写的方式打开文件,如果文件不存在则创建,如果文件存在则追加
// fp = fopen("./file.txt","a");
fp = fopen("./file.txt","r"); // hello
if(fp == NULL)
{
printf("fail to fopen\n");
return -1;
}
// 使用fgetc从文件中读取一个字符
// int c = fgetc(fp);
// printf("c = [%c] - %d\n", c, c); // c = [h] - 104
//
// c = fgetc(fp);
// printf("c = [%c] - %d\n", c, c); // c = [e] - 101
// 注意:文件的每一行结束的位置都有一个标识,是一个换行符,称之为行结束符
// fgetc可以读取到行结束符
int c ;
while ( (c = fgetc(fp)) != EOF ) {
printf("c = [%c] - %d\n", c, c);
}
// c = [h] - 104
// c = [e] - 101
// c = [l] - 108
// c = [l] - 108
// c = [o] - 111
// 使用fclose关闭文件
fclose(fp);
return 0;
}
通过fputc函数向文件写入一个字符
#include <stdio.h>
int main()
{
// 使用fopen函数打开或者创建文件,返回文件指针
FILE * fp;
fp = fopen("./file.txt","w");
if(fp == NULL)
{
printf("fail to fopen\n");
return -1;
}
// 通过fputc函数向文件写入一个字符
fputc('w',fp);
fputc('h',fp);
fputc('a',fp);
fputc('t',fp);
fputc('\n',fp);
fputc('o',fp);
// 使用fclose关闭文件
fclose(fp);
return 0;
}
fread 、 fwrite
#include <stdio.h>
typedef struct{
int a;
int b;
char c;
}MSG;
int main()
{
// 使用fopen函数打开或者创建文件,返回文件指针
FILE * fp;
fp = fopen("./file.txt","w+");
if(fp == NULL)
{
printf("fail to fopen\n");
return -1;
}
// 使用fwrite向文件写入一个结构体
MSG msg[4] = {1, 2, 'a', 3, 4, 'b', 5, 6, 'c', 7, 8, 'd'};
fwrite(msg, sizeof(MSG), 4, fp);
// 将文件的偏移量设置为文件的起始位置
rewind(fp);
MSG rcv[4];
fread(rcv, sizeof(MSG), 4, fp);
int i;
for(i = 0; i<4; i++)
{
printf("%d - %d - %c\n", rcv[i].a, rcv[i].b, rcv[i].c);
}
// 1 - 2 - a
// 3 - 4 - b
// 5 - 6 - c
// 7 - 8 - d
// 使用fclose关闭文件
fclose(fp);
return 0;
}