在C语言中操作文件

一.文件中的路径

1.路径的概念:

文件在电脑中的位置(随便查看一个文件存储在你电脑上的位置,那个就是文件存储的绝对路径)

2.路径的两种表示方式

①:绝对路径:

以盘符(比如每台电脑都有的C盘)开始的路径

②:相对路径:

相对于当前项目而言的路径,并不是以盘符为开始的

3.转义字符

路径是以字符串的形式来进行表示的,但是不知道你有没有注意到一点,有些时候我们表示一个文件是:

"C:\project\myproject\test.txt"

但有些时候它的表示方式又是:

"C:\\project\\myproject\\test.txt"

为什么这两种一个会多一个'\'符号,在某种情况又不需要这个符号呢

其实\符号就是转义字符

转义字符有什么作用呢?

实际上,你是否注意过在C语言中如果我们要打一些特殊的字符,你是根本没办法打印的,比如如果我要打出双引号,怎么办?

这就需要我们用到转义字符了

#include<stdio.h>

int main() {
	printf("\"");	
}

那么聪明的你也一定想到了,为什么上方有些时候我们写路径会加上两个转义字符,有些时候又只需要一个

因为我们需要两个转义字符来让'\'这个字符正常表示,你可以试试能不能单打出一个'\'符号

#include<stdio.h>

int main() {
	printf("\");	
}
// 这个代码显然是错误的,因为转义字符把自己后方的那个双引号转义了

请读者自己运行下方的代码,更好地理解转义字符的含义

#include<stdio.h>
int main() {
	char* file = "C:\\project\\myproject\\test.txt";
	printf("%s\n", file);
}

二. 读取数据

1.书写步骤:

①:打开文件(fopen)

②:读数据(fgetc、fgets、fread)

③:关闭文件(fclose)

fgetc:

#include<stdio.h>
int main() {
	// 以只读的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "r");
	int c;
    // fgetc函数一次读取一个字节的数据,若读取不到,返回-1
	while((c = fgetc(file)) != -1) {
		printf("%c", c);
	}
	fclose(file);
}

fgets:

#include<stdio.h>
int main() {
	// 以只读的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "r");
    // fgets函数一次读取一行的数据,若读取不到,返回null 
    char ans[1024];
    // fgets的返回值也表示它读取到的数据 
	char* another_ans = fgets(ans, 1024, file); 
	printf("%s", another_ans);
	fclose(file);
}

fgets循环遍历读取文件

#include<stdio.h>
int main() {
	// 以只读的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "r");
    // fgets函数一次读取一行的数据,若读取不到,返回NULL
    // fgets的返回值也表示它读取到的数据 
    char arr[1024];
	char* ans;
	while ((ans = fgets(arr, 1024, file)) != NULL) {
		printf("%s", ans);
	} 
	fclose(file);
}

fread循环遍历读取到的数据:

#include<stdio.h>
int main() {
	// 以只读的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "r");
	// 在使用fread进行读取的时候,每次会尽可能地把数组给装满,并且返回当前读取到的有效字节个数,若没有有效数据,则返回0 
	char arr[1024];
	// n表示fread函数读取到的有效字节个数 
	int n; 
	while ((n = fread(arr, 1, 1024, file)) != 0) {
		// 如果不适用for循环一个字节一个字节地读取,一旦有一个数组没有装满就会出现乱码 
		for (int i = 0; i < n; i++)
			printf("%c", arr[i]);
	}
	fclose(file);
}

2.文件的读写模式

(1).r:只读模式

(2).w:只写模式

若文件不存在则创建新文件

若文件已存在则清空文件

(3).a:追加写出模式

若文件不存在则创建新文件

若文件已存在则不清空文件,对其进行续写

(4).rb:只读模式(操作二进制文件)

(5).wb:只写模式(操作二进制文件)

若文件不存在则创建新文件

若文件已存在则清空文件

(6).ab:追加写出模式(操作二进制文件)

若文件不存在则创建新文件

若文件已存在则不清空文件,对其进行续写

三.写出数据

1.目的:

把程序中的数据写道本地文件中永久存储

2.书写步骤:

①:打开文件(fopen)

②:写入数据(fputc、fputs、fwrite)

③:关闭通道(fclose)

fputc:

#include<stdio.h>
int main() {
	// 以只写的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "w");
	// fputc一次写一个字符,并且返回写出的字符 
	int c = fputc(97, file);
	printf("%c", c); 
	fclose(file);
}

fputs:

#include<stdio.h>
int main() {
	// 以只写的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "w");
	// fputs一次写一个字符串,写入成功则返回一个非负数 
	fputs("abcdefg", file); 
	fclose(file);
}

fwrite:

#include<stdio.h>
int main() {
	// 以只写的方式打开下方的文件 
	FILE* file = fopen("D:\\桌面\\test\\file1.txt", "w");
	// fwrite一次写入多个数据,返回写入数据的字节个数 
	char write[] = {97, 98, 99, 100, 101, 102, 103, 104, 105, 106};
	int size = fwrite(write, 1, 10, file);
	// 查看写入的字节个数
	printf("%d", size); 
	fclose(file);
}

3.文件的读写模式

(1).r:只读模式

(2).w:只写模式

若文件不存在则创建新文件

若文件已存在则清空文件

(3).a:追加写出模式

若文件不存在则创建新文件

若文件已存在则不清空文件,对其进行续写

(4).rb:只读模式(操作二进制文件)

(5).wb:只写模式(操作二进制文件)

若文件不存在则创建新文件

若文件已存在则清空文件

(6).ab:追加写出模式(操作二进制文件)

若文件不存在则创建新文件

若文件已存在则不清空文件,对其进行续写

四.小练习,把一个文件中的内容拷贝到另一个文件中

#include<stdio.h>
int main() {
	// 练习:拷贝文件
	// 母文件 
	FILE* file1 = fopen("D:\\桌面\\test\\file1.txt", "rb");
	// 子文件 
	FILE* file2 = fopen("D:\\桌面\\test\\file2.txt", "wb");
	
	char arr[1024];
	int size;
	while ((size = fread(arr, 1, 1024, file1)) != 0) {
		fwrite(arr, 1, size, file2);
	}
	
	fclose(file1);
	fclose(file2);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值