C语言中的文件操作

本文详细介绍了C语言中文件操作的关键函数,包括文件的打开与关闭(如fopen/fclose),读写字符和字符串(如fgetc/fputc/fputs/fscanf),以及二进制格式的数据操作(fwrite/fread)。同时提到了sprintf和sscanf用于字符串格式化转换的功能。
摘要由CSDN通过智能技术生成

C语言中的文件操作

在这里插入图片描述

1、文件的打开

创建文件指针变量

File* pf;

定义一个指向FILE类型数据的指针变量,可以使pf指向某个文件的文件信息区,通过文件指针变量就能够找到与它关联的文件

(1)文件的打开

使用fopen函数打开文件,使用fclose函数关闭文件

打开函数的使用形式:

FILE* fopen(const char* filename,const char* mode);//第一个参数是文件名,第二个参数是打开的方式

打开的方式有:

在这里插入图片描述

完整的文件打开操作:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {

	FILE* pf = fopen("text.txt", "r");//这个文件就和代码在一个路劲下,使用的是相对路径
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
	}

	//读文件


	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}

如果想打开其他位置上的文件就需要加上绝对路径:

比如这里我们想打开桌面上的文件:

FILE* pf = fopen("C:\\Users\\邓欣洋\\Desktop\\text.txt", "r");//但是需要使用转义字符,原本使用一个‘\’,这里就需要两个‘\’
(2)文件的读写
  • 关于一个字符的读,使用的函数为fputc()函数
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {

	FILE* pf = fopen("text.txt", "w");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}

	//写文件
	
	fputc('g', pf);//写一个字符到文件里面


	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}
  • 关于文件的读:

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      int main() {
      
      	FILE* pf = fopen("text.txt", "r");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      	//读文件
      	
      	char c = fgetc(pf);
      	printf("%c\n", c);//读一个字符到文件里面
      
      
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 写一行数据到文件里面

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      int main() {
      
      	FILE* pf = fopen("text.txt", "w");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      	//写文件
      	fputs("hello world!!!", pf);//这是写一行数据到文件里面,原来有的内容就会被现在的数据覆盖
      	//如果在这里不想销毁之前的内容可以将方式改成a,即
      	//FILE* pf = fopen("text.txt", "a");
      
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 读一行数据,并打印出来读的是什么

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      int main() {
      
      	FILE* pf = fopen("text.txt", "r");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      	//读文件
      	char arr[10];
      	
      	fgets(arr,5,pf);//第一个参数是将文件中的数据读到那个地方里面,第二个参数是读多少个字符,第三个数据是从哪个文件里面读
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 格式化写数据到文件里面

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      
      struct S {
      	char arr[10];
      	int age;
      	float grade;
      };
      int main() {
      	struct S s = { "zhangsan",18,98.5 };
      	FILE* pf = fopen("text.txt", "w");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      
      	//写数据
      	fprintf(pf, "%s %d %f", s.arr, s.age, s.grade);
      
      	
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    
  • 格式化读数据

  •   #define _CRT_SECURE_NO_WARNINGS
      
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      
      struct S {
      	char arr[10];
      	int age;
      	float grade;
      };
      int main() {
      	struct S s = { 0 };
      	FILE* pf = fopen("text.txt", "r");
      	if (pf == NULL) {
      		printf("%s\n", strerror(errno));
      		return 1;
      	}
      
      
      	//读数据
      	fscanf(pf, "%s %d %f", &(s.arr), &(s.age), &(s.grade));
      	printf("%s %d %f\n", s.arr, s.age, s.grade);
      
      	
      	//文件的关闭
      	fclose(pf); 
      	pf = NULL;
      	return 0;
      }
    

以上的函数是针对所有的输入和输出流

接下来的函数只针对文件流,只能写到文件里面,或者从文件里面读数据

(3)fwrite函数

以二进制的形式写进文件中

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct S {
	char arr[10];
	int age;
	float grade;
};
int main() {
	struct S s = {"zhangsan",20,85};
	//以二进制的形式写入文件
	FILE* pf = fopen("text.txt", "wb");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	//以二进制的方式写
	fwrite(&s, sizeof(struct S), 1, pf);
	
	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}
(4)fread函数

以二进制的形式读数据

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct S {
	char arr[10];
	int age;
	float grade;
};
int main() {
	struct S s = {0};
	//以二进制的形式读入文件
	FILE* pf = fopen("text.txt", "rb");
	if (pf == NULL) {
		printf("%s\n", strerror(errno));
		return 1;
	}
	//以二进制的方式读
	fread(&s, sizeof(struct S), 1, pf);//第一个参数是读到哪里去,第二个参数是所读数据的大小,第三个参数是要读多少个这样的数据,第四个参数是从哪里读
	printf("%s %d %f\n", s.arr, s.age, s.grade);

	//文件的关闭
	fclose(pf); 
	pf = NULL;
	return 0;
}
(5)sprintf和sscanf函数

sscanf是从一个字符串中转化成一个格式化的数据,sprintf是把一个格式化的数据转化成字符串

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct S {
	char arr[10];
	int age;
	float grade;
};
int main() {
	struct S s = {"zhangsan",20,97};
	struct S tmp = { 0 };
	char buf[100] = { 0 };
	//把s中的格式化的数据转化成字符串buf
	sprintf(buf, "%s %d %f", s.arr, s.age, s.grade);

	//这个buf里面就是"zhangsan 20 97.00000"是一个字符串

	//从字符串buf中获取一个格式化的数据到tmp中;
	sscanf(buf, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.grade));

	return 0;
}
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

要努力点

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

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

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

打赏作者

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

抵扣说明:

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

余额充值