Week3-文件及其相关操作

文件及其读写操作

1.文件:文件分为磁盘文件和设备文件
①磁盘文件:指一组相关数据的有序集合,通常存储在外部介质(比如磁盘)上,使用时才调入内存
②设备文件:在操作系统中把每一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于对磁盘文件的读和写,驱动硬件
(注意:磁盘文件分为文本文件和二进制文件)
文本文件:基于字符编码的文件,常见编码有ASCII、UNICODE等
二进制文件:基于值编码的文件
2.文件的打开和关闭
①文件指针:在C语言中用一个指针变量指向一个we年,这个指针称为文件指针
②EILE是系统使用typedef定义出来的有关文件信息的一种结构体类型,结构中含有文件名、文件状态和文件当前位置等信息。其结构内容如图
在这里插入图片描述
③文件打开和关闭
~文件打开

FILE* fopen(const char* filename,const char* mode)
功能:打开文件
参数:filename:需要打开的文件名,根据需要添加路径
			mode:打开文件的模式设置
返回值:成功:文件指针
	   失败:NULL

~文件关闭

int fclose(FILE* stream)
功能:关闭先前fopen打开的文件,此动作让缓冲区的数据写入文件中,并释放系统所提供的文件资源
参数:stream:文件指针
返回值:成功:0
	   失败:-1

示例:

int main()
{
	FILE* fp = fopen_s("F:/a.txt", "r");
	if (fp == NULL)
	{
		printf("打开文件失败\n");
		return -1;
	}
	printf("打开文件成功\n");
	fclose_s(fp);
	return 0;
}

3.文件顺序读写
~文件顺序读取

int fget(FILE* stream)
功能:从stream指定文件中读取一个字符
参数:stream:文件指针
返回值:成功:返回取到的字符
	   失败:-1

示例:

int main()
{
	FILE* fp = fopen_s("F:/a.txt", "r");
	if (!fp)
		return -1;
	char ch;
	while ((ch = fgetc(fp)) != EOF)
	{
		printf("%c", ch);
	}
	fclose_s(fp);
	return 0;
}

~文件顺序写入

int fputc(int ch,FILE* stream)
功能:将ch转换为unsigned char后写入stream指定文件中
参数:ch:需要写入文件的字符
		  stream:文件指针
返回值:成功:成功写入文件的字符
	   失败:返回-1

示例:

int main()
{
	FILE* fp = fopen_s("F:/a.txt", "r");
	if (!fp)
	{
		printf("打开文件失败\n");
		return -1;
	}
	char ch;
	while (1)
	{
		scanf("%c", &ch);
		if (ch == '@')
			break;
		fputc(ch, fp);
	}
	fclose_s(fp);
	return 0;
}

4.文件行的读写
~文件行的读取

char* fgets(char* str,int size,FILE* stream);
功能:从stream指定的文件馁读入字符,保存到str所指定的内存空间,直到出现换行字符、读文件结尾或是已读size-1个字符为止,最后会自动加上字符‘\0’作为字符串结束
参数:str:字符串·
		  size:指定最大读取字符串的长度(size-1)
		  stream:文件指针
返回值:成功:成功读取的字符串
	   失败(读到文件尾或出错):NULL

示例:

int main()
{
	FILE* fp = fopen("F:/a.txt", "r");
	if (!fp)
		return -1;
	char* p = (char*)malloc(sizeof(char)*100);
	while (!feof(fp))
	{
		menset(p, 0, 100);
		fgets(p, 100, fp);
		printf("%s", p);
	}
	free(p);
	fclose(fp);
	return 0;
}

~文件行的写入

char* fputs(const char* str,FILE* stream);
功能:将str所指定的字符串写入到stream指定文件中,字符串结束符‘\0’不写入文件
参数:str:字符串
		  stream:文件指针
返回值:成功:0
	   失败:-1

示例:

int main()
{
	FILE* fp = fopen("F:/a.txt", "r");
	if (!fp)
		return -1;
	char* p = (char*)malloc(sizeof(char)*100);
	while (!feof(fp))
	{
		menset(p, 0, 100);
		fgets(p, 100, fp);
		printf("%s", p);
	}
	free(p);
	fclose(fp);
	return 0;
}

补充:

int feof(FILE* stream)
功能:检测是否读取到了文件结尾。(注意:判断的是最后一次“读操作的内容”,不是当前位置内容)
参数:stream:文件指针
返回值:非0值:已经到文件结尾
	   0:还未到文件结尾

5.文件格式化读写
~文件格式化读取

int fscanf(FILE* stream,const char* format,...);
功能:从stream指定的文件读取字符串,并且根据参数format字符串来转换格式化数据
参数:stream:已经打开的文件
format:字符串格式,用法和scanf()一样
返回值:成功:参数数目,成功转换的值得个数
	   失败:-1

示例:

int main()
{
	FILE* fp = fopen("F:/a.txt", "r");
	if (!fp)
		return -1;
	char* p = (char*)malloc(sizeof(char) * 1024);
	int a;
	fscanf(fp, "%d", &a);
	printf("%s", p);

	fscanf(fp, "%d", &a);
	printf("%s", p);

	fscanf(fp, "%d", &a);
	printf("%s", p);
	free(p);
	fclose(fp);
	return 0;
}

~文件格式化写入

intf printf(FILE* stream,const char* format,...);
功能:根据参数format字符串来转换并格式化数据,然后将结果输出到stream指定文件中,指定出现字符串结束字符‘\0’为止
参数:steam:已经打开的文件
format:字符串格式,用法和printf()一样
返回值:成功:实际写入文件的字符个数
	   失败:-1

示例:

int main(void)
{
	FILE* fp = fopen("F:/a.txt", "r");
	if (!fp)
		return -1;
	char ch[] = "hello world";
	fprintf(fp, "%s", ch);
	fclose(fp);
}

6.块文件读写
~块文件读取

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

示例:

int main()
{
	FILE* fp = fopen("F:/a.txt", "r");
	if (!fp)
		return -1;
	int value;
	fread(&value, sizeof(int), 1, fp);
	printf("%d\n", value);
	fclose(fp);
	return 0;
}

~块文件写入

size_t fwrite(const void* ptr,size_t size,size_ nmemb,FILE* stream);
功能:以数据块方式给文件写入内容
参数:ptr:准备写入文件数据的地址
size:size_t为unsigned int 类型,此参数指定写入文件内容的块数据大小
nmemb:写入文件的块数,写入文件数据总大小为:size* nmemb
stream:已经打开的文件指针
返回值:成功:实际成功写入文件数据的块数目,此值和nmemb相等
	   失败:0

示例:

int main()
{
	FILE* fp = fopen("F:/a.txt", "r");
	if (!fp)
		return -1;
	int a = 5678;
	fwrite(&a, sizeof(int), 1, fp);
	fclose(fp);
	return 0;
}

7.获取文件状态

int stat(const char* path,struct stat* buf)
功能:获取文件状态信息
参数:path:文件名
buf:保存文件信息的结构体
返回值:
成功:0
失败:1

stat的结构体内容如图:
在这里插入图片描述

示例:

#include"sys/types.h"
#include"sys/stat.h"	//这两个头文件用于调用stat
int main()
{
	struct stat st;
	stat("D:/copy.exe", &st);
	printf("文件大小:%d\n", st.st_size)
		system("pause");
	return 0;
}

文章转载至
在这里插入图片描述
http://blog.bools.cn/archives/477

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值