【C】文件操作

文件

文件可分为程序文件和数据文件。
程序文件包括以.c,.obj,.exe等结尾的文件。
数据文件的内容就是程序运行期间需要输入或输出的数据。
文件也可分为文本文件和二进制文件,在内存中文件以二进制形式存储,不过这除了中文以外(ASCII编码);在外存中的文件格式取决于存储前有没有对文件进行转码。

打开文件

先来讨论如果要打开一个文本文件,将是以哪种方式打开?
是以读(r),写(w),还是追加(a)的方式打开?
在C语言中,如果以只读方式打开一个不存在的文件,将会报错;
写和追加的方式如果打开一个不存在的文件,将会新建一个文件。
以写方式打开文件,将会清空原文件内容,不能读;
以追加方式打开文件,在原文件后添加新内容,不能读。
如果文件是二进制文件将使用:rb , wb , ab 方式打开文件
示例:

//FILE* file = fopen("./test.txt","a");
//FILE* file = fopen("./test.txt","r");
//FILE* file = fopen("./test.txt","w");

如果文件打开失败返回NULL

文件的一些函数

fgetc 以字符形式从文件中读取数据

int fgetc(FILE *stream)

fputc 以字符形式向文件中写数据

int fputc(int char, FILE *stream)

fgets以字符串形式从文件中读取数据

char *fgets(char *str, int n, FILE *stream)

fputs以字符串形式向文件中写数据

int fputs(const char *str, FILE *stream)

fscanf以指定格式从文件中获取数据

int fscanf(FILE *stream, const char *format, ...)

fprintf以指定格式向文件中写数据

int fprintf(FILE *stream, const char *format, ...)

fread二进制读

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

fwrite二进制写

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

以fputs为例写:

#include <stdio.h>

int main()
{
	FILE* file = fopen("./test.txt","w");
	fputs("Java",file);
	fclose(file);
	return 0;
}

运行结果:
在test.txt中写入“Java”
在这里插入图片描述
以fgets为例读:

#include <stdio.h>

int main()
{
	FILE* file = fopen("./test.txt","r");
	char s[100];
	fgets(s, 100, file);
	printf("%s\n", s);
	fclose(file);
	return 0;
}

运行结果:
在这里插入图片描述
当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,fgets读取结束。
fseek偏移到指定下标位置

int fseek(FILE *stream, long int offset, int whence)

ftell返回据文件开始的偏移量

long int ftell(FILE *stream)

rewind使文件指针指向文件起始位置

void rewind(FILE *stream)

test.txt文本内容如下
在这里插入图片描述
示例:

#include <stdio.h>

int main()
{
	FILE* file = fopen("./test.txt","r");
	char s[100];
	fgets(s, 10, file);
	printf("%s\n", s);
	int cur = ftell(file);
	printf("%d\n", cur);

	fseek(file, 4, SEEK_SET);
	cur = ftell(file);
	printf("%d\n", cur);

	rewind(file);
	cur = ftell(file);
	printf("%d\n", cur);

	fclose(file);
	return 0;
}

在这里插入图片描述

关闭文件

fclose(file);

判断是否读取结束

文本文件:
fgetc方式判断文件指针是否等于EOF
fgets方式判断文件指针是否等于NULL
二进制文本:
fread判断读取的个数是否和要读取的个数一致

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值