C语言中文件处理详解

1.流的概念:

        在C语言中,流(stream)是一种用于输入和输出的抽象概念。流可以被看作是数据的流动通道,通过流可以将数据从程序的内存传输到外部设备(输出流),或者将外部设备的数据传输到程序的内存(输入流)。

        流的存在至关重要,流给了一个内存和文件之间进行数据操作的标准。也可以理解为一个介质媒体来实现数据转换。如下图:

        而流又分为标准流和文件流。

        标准流有:标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。这些流对象分别对应于键盘输入、屏幕输出和错误信息输出。标准流在程序运行时自动打开,并且不需要手动关闭。

        文件流:是用户自定义的流对象,用于对文件进行读写操作。文件流需要使用fopen函数打开文件,并使用fclose函数关闭文件。文件流可以读取和写入文件中的数据。fopen函数见下。

2.输入输出在文件中的概念:

        输入输出都是针对内存而言的。(注意:输出输入操作都是相较内存而言的)

        输出操作时,是内存对文件进行写操作。内存向文件进行输入,可以改变文件内容。

        输入操作时,是内存对文件进行读操作。文件的数据直接被读到内存中。

3.文件的打开:

        使用fopen函数进行文件的创建,fopen函数的函数如下)

     (FILE * fopen(const char *文件, const char *打开方式))

        如此代码表示: FILE* pf = fopen("test.txt", "r")  :以只读形式在当前目录下找到文件test.txt

此处的test.txt为相对路径(针对当前程序所在目录下)

文件路径:

        分为相对路径和绝对路径。简单说:相对路径是当前程序的目录。'  .  '表示当前路径
    ' .. ' 表示上一级路径,如 :

fopen(".\\..\\test.txt","w")
//当前路径的上一级路径下的test.txt文件

        绝对路径就是文件的位置,可以通过属性来找,如:

FILE* pf = fopen("C:\\Users\\Desktop\\test.txt", "w");
//打开指定路径文件: C:\Users\Desktop (绝对路径)
//避免转义字符在每个 '\' 前加上一个 '\'

打开方式:

注意:

        fopen函数操作失败返回空指针,操作成功返回文件地址.为了避免对空指针进行操作,所以文件再进行打开操作后要对文件进行是否为空指针的判断

FILE* pf = fopen("test.txt", "r");

	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

4.文件的关闭:

        使用 fclose函数:    int fclose( FILE * stream),在关闭文件后pf指针变成野指针,将pf赋值为空指针,保证代码安全性。

FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
	perror("fopen");
	return 1;
}
	
//关闭文件
fclose(pf);
pf = NULL;

5.文件的读写:

写操作(输出操作):

fputc :字符输出函数(一次写一个字符)    指内存向文件输出 --- 写入操作
// int fputc( int 字符, FILE *文件指针)      适用于所有的输出流(标准流、文件流)

        文件流输出操作:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	FILE* pf = fopen("test.txt", "w");

	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	char ch = 'a';
	//写文件
	for (; ch <= 'z'; ch++)
	{
		fputc(ch, pf);//输出字符到文件中
		//a-z:顺序存储
	}

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

首先在当前目录下创建test.txt文件,再将ch输出到文件之中,最后关闭文件。

我们在文件目录下找到test.txt文件,以记事本形式打开文件,结果如图:

        标准流输出操作:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	char ch = 'a';
	for (; ch <= 'z'; ch++)
	{
		fputc(ch, stdout);
	}
	return 0;
}

以标准流的形式输出(stdout表示在屏幕上显示),结果如下:

读操作(输入操作):

        fgets:字符输入函数(一次读一个数据)     int fgetc ( FILE * stream );
适用于所有的输出流(标准流、文件流)。

        文件流输入操作:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	FILE* pf = fopen("test.txt", "r");

	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//test文件已有
	char ch = 'a';
	for (; ch <= 'z'; ch++)
	{
		fgetc(pf);//文件流向内存进行输入
		printf("%c ", ch);
	}

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

文件test.txt中存放a~z,fgets每次读一个字符,采用循环遍历完文件内容,打印结果为: a~z,

        标准流输入操作:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	char ch = fgetc(stdin);
	printf("%c\n", ch);

	//相当于 getchar()
	return 0;
}

标准流输入( stdin 表示以键盘输入),输入 a后结果为 a。

最后如果此文章对你有所帮助,希望多多支持up.创作不易球球了.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值