c语言基础知识-文件操作

  (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

C语言文件操作

1、打开文件

fopen

2、读取文件 

fgetc

fgets 

fread 

3、写入文件 

fputc

 fputs

 fwrite

4、文件定位

fseek

rewind

ftell 


C语言文件操作

1、打开文件

fopen

打开文件我们需要fopen函数,选中fopen然后按键盘F1键即可打开微软的MSDN数据库,下面就是MSDN中打开文件的几种方式:

mode

Access

"r"

打开以便读取。 如果文件不存在或找不到,fopen 调用将失败。

"w"

打开用于写入的空文件。 如果给定文件存在,则其内容会被销毁。

"a"

在文件末尾打开以进行写入(追加),在新数据写入到文件之前不移除文件末尾 (EOF) 标记。 如果文件不存在,则创建文件。

"r+"

打开以便读取和写入。 文件必须存在。

"w+"

打开用于读取和写入的空文件。 如果文件存在,则其内容会被销毁。

"a+"

打开以进行读取和追加。 追加操作包括在新数据写入文件之前移除 EOF 标记。 写入完成后,EOF 标记不会还原。 如果文件不存在,则创建文件。

我们用“r”来打开文件,复制文件的绝对地址后修改转义字符,并用if语句检测,最后关闭文件。

如果程序运行成功且并没有显示打开失败,则打开文件成功

#include<stdio.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r");
	if (fp == NULL)
	{
		printf("打开失败\n");
	}
	//关闭文件
	fclose(fp);
	return 0;
}

2、读取文件 

fgetc

读取文件我们可以用函数fgetc,fgetc函数一次只能读取一个文件,当文件全部读完后,它会返回EOF,所以我们可以用while循环实现一次性读取全部文件 

int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r");
	//fgetc读取完以后,会将文件指针移动到下一个字符
	char ch = fgetc(fp);//读取第一个
	printf("%c\n",ch);
	ch = fgetc(fp);//读取第二个
	printf("%c\n", ch);
	while (EOF !=(ch = fgetc(fp)))//循环读取全部文件内容
	{
		printf("%c",ch);
	}
	//关闭文件
	fclose(fp);
	return 0;
}

我的文件内容为         ) 

输出为:

1
2
3456
abcdef

fgets 

我们也可以用fgets函数读取文件,fgets函数一次可以读取一行,和fgetc一样,fgets读取完一行以后,会将文件指针移动到下一行

#include<stdio.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r");
	char str[200];
	fgets(str, 200, fp);
	printf("%s\n", str);//读取第一行
	fgets(str, 200, fp);
	printf("%s\n", str);//读取第二行
	//关闭文件
	fclose(fp);
	return 0;
}

输出为:

123456

abcdef

fread 

 与上面两个函数相比,fread函数就显得更加方便,fread函数可以选择要读取的文件数量,用法如下:

fread( void *buffer, size_t size, size_t count, FILE *stream );

buffer
数据的存储位置。

size
项目大小(以字节为单位)。

count
要读取的项的最大数量。

stream
指向 FILE 结构的指针。

#include<stdio.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r");
	//fread函数可以读取任意数目的文件内容
	char str[200] = { 0 };
	//每个元素1个字节,读取10个这样的元素,返回实际读取的大小
	fread(str, 1, 10, fp);
	printf("%s\n", str);
	//关闭文件
	fclose(fp);
	return 0;
}

输出为:

123456
abc

3、写入文件 

fputc

fputc和fgetc用法相似,都是一次作用一个元素 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "w");
	//写入一个字符,清空写
	fputc('a', fp);//第一个字符
	fputc('b', fp);//第二个
	fputc('c', fp);//第三个
	//关闭文件
	fclose(fp);
	return 0;
}

文件内容就变成了       

 fputs

fputs函数一次可以写入一串字符

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "w");
	//写入字符串
	const char * str="123456";
	fputs(str, fp);
	//关闭文件
	fclose(fp);
	return 0;
}

 文件内容就变成了  

 fwrite

fwrite函数与fread函数类似,可以写入任意数量的字符串

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "w");
	//fwrite函数
    const char* str = "abcdefg";
	fwrite(str, 1, strlen(str), fp);
	//关闭文件
	fclose(fp);
	return 0;
}

文件就变成了     

4、文件定位

fseek

 fseek函数可以用于定位元素在文件中的位置

原始值

含义

SEEK_CUR

文件指针的当前位置。

SEEK_END

文件结尾。

SEEK_SET

文件开头。

可以使用 fseek 在文件的任何位置重新定位指针。 此外还可以在文件结尾外放置指针。

如下便是fseek函数的三种原始值用法:

#include<stdio.h>
#include<string.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "r+");
	char str[200] = { 0 };
	fseek(fp, 3, SEEK_SET);//定位第三个元素
	fread(str, 1, 3, fp);//从第三个元素开始往后读取
	printf("%s\n", str);
	//关闭文件
	fclose(fp);
	return 0;
}

我的文件内容为         ) 

输出为:

456

    char str[200] = { 0 };
	fseek(fp, 3, SEEK_SET);//定位第三个元素为首元素
	fread(str, 1, 3, fp);//从第三个元素开始往后读取3个元素
	printf("%s\n", str);
	fseek(fp, 3, SEEK_CUR);//定位当前读到的位置,即第六个元素为首元素
	fread(str, 1, 3, fp);//从当前位置开始往后读取3个元素
	printf("%s\n", str);

输出为: 

456
bcd

    char str[200] = { 0 };
	fseek(fp, -4, SEEK_END);//以倒数第三个元素为首元素地址
	fread(str, 1, 3, fp);//从当前位置开始往后读取3个元素
	printf("%s\n", str);

 输出为:

cde

rewind

rewind函数可以重置文件指针,返回到文件的开头 

ftell 

ftell可以显示文件指针当前的位置

我们可以将两者结合来计算文件大小

#include<stdio.h>
#include<string.h>
int main()
{
	//打开文件
	// \是转义字符,为了避免影响,这里使用\\

	FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "r+");
	//rewind函数可以重置文件指针,返回到文件的开头
	rewind(fp);
	fseek(fp, 0, SEEK_END);
	int size = ftell(fp);//ftell可以显示文件指针当前的位置
	printf("文件的大小:%d\n", size);
	//关闭文件
	fclose(fp);
	return 0;
}

输出为:

文件的大小:14 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小周不想卷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值