【C语言】文件操作(上)

这篇具有很好参考价值的文章主要介绍了【C语言】文件操作(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 文件的好处

如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,而文件可以帮助我们永久保存数据,防止丢失

二. 文件的分类

从功能的角度分类:

分为 程序文件数据文件

1. 程序文件

包括 源文件(后缀.c), 目标文件(windows环境后缀.obj), 可执行文件(windows环境后缀.exe)

2. 数据文件

文件的内容不一定是程序,而是程序运行时读写的数据

从数据组织的角度分类:

分为 二进制文件文本文件

a. 二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。

b. 文本文件

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。

字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。

举例

数字 10000

【C语言】文件操作(上),c语言

三. 流 和 标准流

1. 流 的概念

数据的输入和输出都需要依靠外部设备,因为不同外部设备输入输出不同,为了方便操作方便,引出流的概念

进行输入输出的时候,都需要打开流

2. 标准流 的概念

实际上,当我们使用printf 和 scanf 这样输入输出的函数时,已经打开了流,这个流就是标准流(本质是对于键盘的输入输出)

C语言启动时 ,会打开的三个标准流

a. stdin --- 标准输入流

b. stdout -- 标准输出流

c. stderr -- 标准错误流

stdin、stdout、stderr 三个流的类型是: FILE* ,通常称为文件指针,C语言可以通过文件指针来维护流

四. 文件指针

文件指针的概念和作用

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件信息,这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名 FILE

每当打开一个文件的时候,系统会根据文件的情况自动创建一个 FILE结构的变量,并填充其中的信息,通过文件指针变量能够间接找到与它关联的文件

五. 文件的打开和关闭

1. 文件的打开

fopen 函数来打开文件

跳转网站

fopen - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. FILE * fopen(const char *filename , const char * mode)

返回类型 : FILE * (返回文件的地址)

     2. 参数 filename 和 mode

filename 是指 文件的名字 (如:“test.txt”)

mode 是指使用方式

参数类型都是 char *

    3.引用头文件

<stdio.h>

    4. 打开失败

文件可能出现打开失败的情况,返回的就是空指针(一般情况下,我们需要去判断)

举例

FILE * fopen("test.txt","w");

2. 文件的关闭

fclose 函数来关闭文件

跳转网站

fclose - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. FILE * fopen(const char *filename , const char * mode)

返回类型 : int

     2. 参数 stream

stream 是流的指针

参数类型是 FILE*

    3. 引用头文件

<stdio.h>

举例

#include<stdio.h>
int main()
{
	FILE *pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
	}
	fclose(pa);
	return 0;
}

运行结果:

【C语言】文件操作(上),c语言

3. 文件的使用方式

a.    "r" (只读):

打开一个已经存在的文件(没有这个文件就会报错)

举例

#include<stdio.h>
int main()
{
	FILE *pa = fopen("test.txt", "r");
	if (pa == NULL)
	{
		perror("fopen");
	}
	fclose(pa);
	return 0;
}

如果没有这个文件,就会报错

【C语言】文件操作(上),c语言

b.    "w"(只写):

打开一个文件,如果没有就新创建一个文件,结束程序时,下一次还使用 “w”方式打开文件,里面的内容不会保存

举例

#include<stdio.h>
int main()
{
	FILE *pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
	}
	fclose(pa);
	return 0;
}

【C语言】文件操作(上),c语言

【C语言】文件操作(上),c语言

这是新建的文件夹

c.   "rb"(二进制读)

打开一个已经存在的文件(没有这个文件就会报错)

d.    “wb"(二进制写)

打开一个文件,如果没有就新创建一个文件

六. 顺序读写函数

1. fgetc

字符输入函数 (相当于从流中读取数据)

跳转网站

fgetc - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. int fgetc (FILE* stream)

返回类型 : int (返回的是字符的ASCLL码值)

    2. 参数 stream

stream 是流的指针(适用于所有流)

参数类型是 FILE *

    3. 引用头文件

<stdio.h>

举例

此时文件里面的内容:

【C语言】文件操作(上),c语言

#include<stdio.h>
int main()
{
	FILE *pa = fopen("test.txt", "r");
	if (pa == NULL)
	{
		perror("fopen");
	}
	int ret = fgetc(pa);
	printf("%c ", ret);
	fclose(pa);
	return 0;
}

运行结果:

【C语言】文件操作(上),c语言

#include<stdio.h>
int main()
{
	FILE *pa = fopen("test.txt", "r");
	if (pa == NULL)
	{
		perror("fopen");
	}
	int ret = fgetc(pa);
	fputc(ret, stdout);
	fclose(pa);
	return 0;
}

运行结果:

【C语言】文件操作(上),c语言

2. fputc

字符输出函数 (相当于向流中写入数据)

跳转网站

fputc - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. int fputc (int character, FILE * stream)

返回类型 : int (返回的是字符的ASCLL码值)

    2. 参数 character 和 stream

character 是 字符的ASCLL码值

stream 是流的指针(适用于所有流)

参数类型分别是 int 和 FILE *

    3. 引用头文件

<stdio.h>

举例

#include<stdio.h>
int main()
{
	FILE *pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
	}
	int ret = fputc('A', pa);
	fclose(pa);
	return 0;
}

【C语言】文件操作(上),c语言

3. fgets

文本行输入函数(相当于从流中读取数据)

跳转网站

fgets - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. char * fgets ( char * str, int num, FILE * stream )

返回类型 : char *(返回字符的地址)

    2. 参数 str ,num, stream

str 是数组的地址

num 是读取数据的个数(实际上读取的个数是 num - 1,因为它还会放入一个'\0')

stream 是流的指针(适用于所有流)

参数类型分别是 char* , int , FILE *

  3. 引用头文件

<stdio.h>

举例

此时文件的内容:

【C语言】文件操作(上),c语言

#include<stdio.h>
int main()
{
	char ch[10];
	FILE *pa = fopen("test.txt", "r");
	if (pa == NULL)
	{
		perror("fopen");
	}
	fgets(ch,3,pa);
	printf("%s", ch);
	fclose(pa);
	return 0;
}

运行结果:

【C语言】文件操作(上),c语言

4. fputs

文本行输出函数(相当于向流中写入数据)

跳转网站

fputs - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. int * fgets ( const char * str , FILE * stream )

返回类型 : int (返回字符的地址)

     2. 参数 str , stream

str 是数组的地址

stream 是流的指针(适用于所有流)

参数类型分别是 char* , FILE *

    3. 引用头文件

<stdio.h>

举例

#include<stdio.h>
int main()
{
	char ch[] = "abcde";
	FILE* pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
		return 1;
	}
	fputs(ch,stdout);
	fclose(pa);
	return 0;
}

运行结果:

【C语言】文件操作(上),c语言

#include<stdio.h>
int main()
{
	char ch[] = "abcde";
	FILE* pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
		return 1;
	}
	fputs(ch,pa);
	fclose(pa);
	return 0;
}

【C语言】文件操作(上),c语言

5. fscanf

格式化输入函数 (相当于从流中读取数据)

跳转网站

【C语言】文件操作(上),c语言

注意事项:

  1. 用法和 scanf 很像,但多了一个参数
  2. 多的参数 stream

stream 是流的指针(适用于所有流)

参数类型是 FILE *

     3.引用头文件

<stdio.h>

举例

此时文件的内容:

【C语言】文件操作(上),c语言

#include<stdio.h>
int main()
{
	char ch[10] ;
	FILE* pa = fopen("test.txt", "r");
	if (pa == NULL)
	{
		perror("fopen");
		return 1;
	}
	fscanf(pa, "%s", ch);
	return 0;
}

【C语言】文件操作(上),c语言

6. fprintf

格式化输出函数 (相当于向流中写入数据)

跳转网站

fprintf - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. 用法和 printf 很像,但多了一个参数
  2. 多的参数 stream

stream 是流的指针(适用于所有流)

参数类型是 FILE *

    3. 引用头文件

<stdio.h>

举例

此时文件的内容:

【C语言】文件操作(上),c语言

#include<stdio.h>
int main()
{
	char ch[10] = "AAACCC";
	FILE* pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
		return 1;
	}
	fprintf(pa,"%s", ch);
	return 0;
}

现在文件的内容:

【C语言】文件操作(上),c语言

7. fread

二进制输入(相当于从流中 以二进制的形式 读取 数据)

跳转网站

fread - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. size_t fread ( void * ptr, size_t size, size_t count, FILE * stream )

返回类型 :size_t

     2. 参数 ptr ,size , count ,stream

ptr 可以是任何类型的指针

size 是 指针所指对象每个元素的大小

count 是 指针所指对象每个元素的个数

stream 是流的指针(适用于文件

参数类型是 void *,size_ t, size_ t ,FILE *

    3. 引用头文件

<stdio.h>

举例

#include<stdio.h>
int main()
{
	char ch[10];
	FILE* pa = fopen("test.txt", "r");
	if (pa == NULL)
	{
		perror("fopen");
		return 1;
	}
	fread(ch,sizeof(int),1,pa);
	return 0;
}

【C语言】文件操作(上),c语言

8. fwrite

二进制输出(相当于向流中 以二进制的形式 写入 数据)

跳转网站

fwrite - C++ Reference

【C语言】文件操作(上),c语言

注意事项:

  1. size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

返回类型 :size_t

     2. 参数 ptr ,size , count ,stream

ptr 可以是任何类型的指针

size 是 指针所指对象每个元素的大小

count 是 指针所指对象每个元素的个数

stream 是流的指针(适用于文件

参数类型是 void *,size_ t, size_ t ,FILE *

    3. 引用头文件

<stdio.h>

举例

#include<stdio.h>
int main()
{
	int ch[] = {1,2,3,4};
	FILE* pa = fopen("test.txt", "w");
	if (pa == NULL)
	{
		perror("fopen");
		return 1;
	}
	fwrite(ch,sizeof(int),4,pa);
	return 0;
}

此时文件的内容:

【C语言】文件操作(上),c语言

因为 输入是以二进制的形式输入,而用文本编译器编辑,所以结果会与之前不同文章来源地址https://www.toymoban.com/news/detail-791268.html

到了这里,关于【C语言】文件操作(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 进阶C语言-文件操作

    ✅ 我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受

    2024年04月22日
    浏览(24)
  • C语言—文件操作

    前言 在写完通讯录的程序时,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。 既然是通讯录

    2024年02月08日
    浏览(27)
  • 文件操作 -- C语言

     在之前学习的时候,我们可以发现 当程序运行完,我们之前保存的数据就会消失 ,再次运行时还得重新输入,为了使我们保存的数据在下次运行时还能使用,我们这篇文章来学习一下怎么使用文件操作,将我们的数据保存在文件中。 目录 1.什么是文件 2.文件名 3.文件指针

    2024年02月11日
    浏览(27)
  • 【C语言】文件操作

    目录 前言: 一、为什么使用文件 二、什么是文件 (一)程序文件 (二)数据文件 (三)文件名 三、文件的打开和关闭 (一)文件指针 (二)文件的打开和关闭 四、文件的顺序读写 (一)对比一组函数 五、文件的随机读写 (一)fseek (二)ftell (三)rewind 六、文本文

    2024年02月16日
    浏览(26)
  • 【C语言】文件操作(上)

    如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,而文件可以帮助我们永久保存数据,防止丢失 从功能的角度分类: 分为 程序文件 和 数据文件 包括 源文件 (后缀.c), 目标文件 (windows环境后缀.obj), 可执行文件 (

    2024年02月01日
    浏览(28)
  • C语言——文件操作(1)

    本章重点 1. 为什么使用文件 2. 什么是文件 3. 文件的打开和关闭 4. 文件的顺序读写 5. 文件的随机读写 6. 文本文件和二进制文件 7. 文件读取结束的判定 8. 文件缓冲区 1.为什么使用文件 我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增

    2023年04月09日
    浏览(21)
  • <C语言> 文件操作

    缓冲文件系统中,关键的概念是“ 文件类型指针 ”,简称“ 文件指针 ”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有

    2024年02月14日
    浏览(27)
  • 【C语言】文件操作(1)

    如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。 磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种

    2024年04月26日
    浏览(18)
  • c语言-文件操作

    如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。 磁盘上的文件是文件。 但是在程序设计中,我们⼀般谈的文件有两

    2024年02月03日
    浏览(33)
  • c语言中文件操作

    我们为了让写的程序储存在电脑中,就可以使用文件。这样就不会随着程序退出,内存回收造成数据丢失了。 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数

    2024年04月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包