文件

文件

=====================================

文件的读写及储存

一.文件的定义

文件名 = 文件路径 + 文件名主干 + 文件后缀

二.文件类型

  • 文本文件:以ACSII字符形式存储的文件
  • 二进制文件:以二进制形式储存的文件

三.储存方式:

  • 字符一律以ASCII形式储存

  • 数值型数据以ASCII/二进制形式存储
    在这里插入图片描述

  • 从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。

  • 如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区。

四.打开/关闭方式

打开一个文件(fopen),系统会创建一个FILE的结构体变量,其中包含着各种关于文件的属性(通过FILE指针维护FILE变量).

1.fopen:

FILE * fopen ( const char * filename, const char * mode )

①参数

  • filename---------要打开的文件的名称的字符串

②返回值

  • 指向流的指针

③注意事项

  • 如果打开失败,返回NULL

2.fclose:

int fclose(FILE* stream)

//关闭之后将fclose中的指针置为空
stream = NULL

	//文件的打开和关闭
	FILE*ret = fopen("文件的打开和关闭.txt", "r");	
	if (ret == NULL) {
		perror("open file for reading");
		return 1;
	}
	fclose(ret);
	ret = NULL;

五.读写数据

1.写数据:

//写数据
	FILE* ret2 = fopen("文件的打开和关闭.txt", "w");
	if (ret2 == NULL) {
		perror("open file for writting");
		return 1;
	}
	fputs("hello\n", ret2);
	fputs("haha", ret2);
	fclose(ret2);
	ret2 = NULL;

2.读数据:

//读数据
	FILE* ret3 = fopen("文件的打开和关闭.txt", "r");
	if (ret3 == NULL) {
		perror("open file for reading");
		return 1;
	}
	fgets(arr, 20, ret3);
	printf("%s", arr);
	fgets(arr, 20, ret3);
	printf("%s", arr);

3.拷贝:

FILE*ret = fopen("文件的打开和关闭.txt", "r");	
	if (ret == NULL) {
		perror("open file for reading");
		return 1;
	}

	FILE* res = fopen("文件的打开.txt", "w");
	if (res == NULL) {
		perror("open file for reading");
		fclose(ret);
		ret = NULL;
		return 1;
	}
//拷贝
	while (fgetc(ret) != EOF) {
		fputc(fgetc(ret),res);
	}
	fclose(ret3);
	ret3 = NULL;

六.读写指令(r,w)

“r”读(文件不存在,会失败)
“w”写(打开一个空文件,如果文件已经存在,内容会被销毁)
“a”向文本文件尾添加数据(文件不存在,会失败)
"rb"只读为了输入数据,打开一个二进制文件(文件不存在,会失败)
"wb"只写为了输出数据,打开一个二进制文件(文件不存在,会建立一个新的文件)
"ab"追写二进制文件尾添加数据(文件不存在,会失败)

在这里插入图片描述

七.输入输出函数

在这里插入图片描述

1.fputc—把c字符放到stream流中

int fputc(int c,FILE* stream)

fputc("h", ret2);

2.fgets—在pf中打印n长的string字符串

char* fgets(char* string,int n,FILE* pf)

fgets(arr, 20, ret3);

3.fprintf

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

fprintf(up,"%s %d",%a,&b)

4.fscanf

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

fscanf(up,"%s %d",%a,&b)

5.sprintf—将后面结构化的数据转化为字符串形式:

int sprintf(const char* buffer,const char* format…)

sprintf(str,"%s %d",%a,&b)

6.sscanf—将后面的数据提取为结构化的数据:

int sscanf(const char* buffer,const char* format)

sscanf(str,"%s %d",%a,&b)

7.fread—将流里的数据读到buffer里(函数返回值为真实返回完整元素的个数)

size_t fread(void* buffer,size_t size,size_t count,FILE* stream)
(,要读的数据每个元素大小,最多读几个数据,流)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Stu{
char name[20];
int age;
};

int main()
{
struct Stu s = {"zhangsan",20};
FILE* pf = fopen("text.txt","wb");
if(pf == NULL){
perror("open file for writting");
return 1;
}
//写文件
fread(&s,sizeof(struct Stu ),1,pf);
printf("%s %d",s.name,s.age);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}

8.fwrite—将buffer的数据写到流里

size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream)
(要写数据的地址,要写的数据每个元素大小,最多写几个数据,流)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Stu{
char name[20];
int age;
};

int main()
{
struct Stu s = {"zhangsan",20};
FILE* pf = fopen("text.txt","wb");
if(pf == NULL){
perror("open file for writting");
return 1;
}
//写文件
fwrite(&s,sizeof(struct Stu),1,pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}

=====================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值