C语言-文件操作

1. 文件分类

我们通常见到文件可分为程序文件数据文件,程序文件例如 test.c,detect.py等都是程序文件,数据文件顾名思义,就是存储数据的文件,例如我们通常使用的的记事本。
数据文件按照存储方式可以分为文本文件二进制文件,文本文件以ASCII码存储字符,二进制文件是以二进制01形式存储文件的。
针对文本文件和二进制文件,C语言有着不同的处理方式。

2. 文件处理模式,常用函数

2.1 文件处理模式

文件通常处理模式分为 : r , w ,a ,r+,w+,a+
r表示以读的模式打开文件,如果文件不存在,则报错。
w表示以写的模式打开文件,如果文件不存在,则创建该文件。
a表示以追加模式打开文件,向文件末尾追加数据,如果该文件不存在,则创建文件。
r+表示以读写模式打开文件,如果文件不存在,则报错。
w+表示以写读模式打开文件,如果文件不存在,则创建该文件。
a+表示以追加和读的模式打开文件,读从文件起始位置开始,追加以文件末尾开始,如果文件不存在,则创建该文件。

rb , wb ,ab ,rb+,wb+,ab+ 表示处理二进制文件,功能与上述对应的模式相似。

2.2 文件处理常用函数

fgetc 表示从输入中读取一个字符,fputc表示写入一个字符。
fgetc 表示从输入中读取指定长度的字符串,fputc表示写入一个字符串。
fscanf表示格式化读取内容,fprintf表示格式化写入内容。
fwrite表示写入二进制内容,fread表示读取二进制内容。

3. 应用举例

3.1 向文件中写入0到9数字

fgetc_fputc测试

#define  _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>


int main() {

	FILE* p1 = fopen("data.txt", "w+");
	if (p1 == NULL) {
		perror("fopen data.txt error:");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++) {
		fputc('0' + i, p1);
	}
	rewind(p1); //使光标回到开始位置
	int ch;
	for (i = 0; i < 10; i++) {
		ch = fgetc(p1);
		printf("%c ", ch);
	}
	fclose(p1);
	return 0;
}

在这里插入图片描述

3.2 将一个文件内容复制到另一个文件中

#define  _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>


int main() {

	FILE* p1 = fopen("data.txt", "r");
	FILE* p2 = fopen("data_copy.txt", "w");
	if (p1 == NULL ||p2==NULL) {
		perror("fopen  error:");
		return 1;
	}
	int ch = 0;
	while ((ch = fgetc(p1)) != EOF) {
		fputc(ch, p2);
	}
	fclose(p1);
	fclose(p2);
	return 0;
}

3.3 fread_fwrite函数测试

void test_fread_fwrite(void) {
	FILE* p1 = NULL;
	p1 = fopen("test3.txt", "wb+");
	if (p1 == NULL) {
		perror("fopen error test3.txt :");
		exit(1);
	}
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
	int arr1[10] = { 0 };
	fwrite(arr, sizeof(int), 10, p1);
	rewind(p1);
	fread(arr1, sizeof(int),10, p1);
	for (int i = 0; i < 10; i++) {
		printf("%d ", arr1[i]);
	}
	fclose(p1);
	p1 = NULL;
	
}

3.4 sprintf_sscanf函数测试

struct stu {
	int age;
	char name[10];
	float money;
};
void test_sprintf_sscanf(void) {
	char* p1 = (char*)malloc(20);
	char* p2 = (char*)malloc(20);
	struct stu s1 = { 55,"wangwu",5000. };
	int a = 0;
	char arr[10] = { 0 };
	float b = 0.;
	//sprintf(p1, "%d %s %f", 50, "daydayup", 3.500000);
	//printf(p1);
	sprintf(p1, "%d %s %f", s1.age, s1.name, s1.money);
	//printf(p1);
	sscanf(p1, "%d %s %f", &a, arr, &b);
	printf(" %d %s %f", a, arr, b);
	
}

3.5 fgets_fputs函数测试

void test_fgets_fputs(void) {
	FILE* p1 = NULL;
	p1 = fopen("test.md", "w+");
	if (p1 == NULL) {
		perror("fopen fail:");
		return 1;
	}
	fputs("woaixuexi", p1);
	char arr[20] = { 0 };
	rewind(p1);  //写完之后在最后的位置,要读取的话得重置光标的位置
	fgets(arr, 20, p1);
	printf(arr);
	fclose(p1);
	p1 = NULL;

}

3.6 fseek_ftell_rewind函数测试

void test_fseek_ftell_rewind(void) {
	FILE* p1 = NULL;
	char p2[50] = { 0 };
	p1 = fopen("test4.txt", "w+");
	if (p1 == NULL) {
		perror("fopen error: ");
		exit(1);
	}
	fputs("hello world", p1);
	int num_offset = ftell(p1);
	printf("%d ", num_offset);
	fseek(p1, 1, SEEK_SET);
	fputs("xxxxx", p1);
	num_offset = ftell(p1);
	printf("%d\n", num_offset);
	rewind(p1);
	fgets(p2, 50, p1);
	printf(p2);
	fclose(p1);
	p1 = NULL;

}

总结

本文主要阐述了文件的各种处理模式以及常见的文件处理函数,并且用C语言举例这些函数的该怎么使用,验证了这些函数的功能。

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值