返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中炫酷的文件操作实例详解
  • 134
分享到

C语言中炫酷的文件操作实例详解

2024-04-02 19:04:59 134人浏览 安东尼
摘要

目录什么是文件程序文件数据文件 (本文重点)文件名文件的打开和关闭文件指针文件函数相对路径与绝对路径输入输出流二进制读写fwirtefread总结什么是文件 磁盘上的文件是文件 但是

什么是文件

磁盘上的文件是文件

但是在程序设计中,我们一般谈的文件有两种:程序文件和数据文件(从文件功能的角度来分类)。

程序文件

包括源程序文件(例如.c文件)目标文件(windows环境后缀为.obj)可执行程序(windos环境后缀为exe)。

数据文件 (本文重点)

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

文件名

文件就像人一样,他也要有姓氏和名字来让其他文件或者人知道这个文件是谁。

对于每一个文件要,,都有一个唯一的文件标识,以便用户识别和引用。

文件名格式:文件路径+文件名主干+文件后缀

例如:D:\CSDN\Test.txt

为了方便起见,我们叫文件标识为文件名

文件的打开和关闭

文件指针

我们知道,指针是指向一个地址的,整形指针指向一个整形的空间,数组指针指向一个数组的空间,那么文件指针自然就是指向文件的指针了。

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。

这是再vs的stdio头文件下的文件信息区结构体


struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };
typedef struct _iobuf FILE;
//不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

就像学生要有学号姓名年龄这些信息一样,文件也有他的信息,比如这个文件的地址。这些信息存放于这个结构体中,通过typedef重命名为FILE,并且我们不需要关心一些细节(你会关心我昨天晚上吃了什么吗)。

一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

下面我们可以创建一个FILE*的指针变量:


FILE* pf;

pf通过该文件信息区中的信息就能够访问该文件。

也就是说,通过文件指针变量能够找到与它关联的文件。

但上面的文件指针并未指向明确的位置,他暂时是一个野指针

所以接下来,我们来学习如何打开(创建)一个文件。

文件函数

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。

在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

ANSIC规定使用fopen函数来打开文件,fclose来关闭文件。


//打开文件
FILE* fopen(const char *filename,const char *mode);
//第一个参数是文件名,第二个参数是打开方式
//关闭文件
int Fclose(FILE *stream);

部分打开方式如下图

在这里插入图片描述

现在我们来练习一下打开文件


//打开文件
	FILE* pf = fopen("data.txt","r");
	//以只读的方式打开这个文件
	//如果文件打开失败会返回空,否则会返回指向该文件的指针
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//读文件
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;

在这里插入图片描述

但是却打开失败了!!

原因是,从上面的打开方式一图我们可以看出,以"r"方式打开,需要该文件真实存在,但是我并没有创建这个文件,所以打开失败了

叮~文件创建成功

我们再来看执行结果

在这里插入图片描述

这回没有报错

但是,这里是将data.txt文件放在了该.c文件目录下,在我将该文件放在别的地方,仍然打开失败报错。

原因是,我们这段代码只输入了文件名,所以他只在当前文件目录下寻找该文件,在其他地方的文件我们就找不到了。

这里我们来看看两个东西,一个叫相对路径,一个叫绝对路径

相对路径与绝对路径

 相对路径

只认为是当前目录下的文件,如上面的代码中。

绝对路径

带上文件的从磁盘到目标文件的路径

例如

D:\Program Files\data.txt

但是请注意,在编程中,\是转义字符,所以我们需要让\不再是转义字符,使其代表它本身

D:\Program Files\data.txt

输入输出流

什么是输入输出流

学习过编程,一定知道printf或者cout或者System.out.println吧,

这些函数用于打印数据,这就是标准的输出流。使数据输出或者写入文件中,我们叫输出流。

我们打印HELLO WORLD在屏幕上,就是一个标准输出流

像scanf之类的,从文件输入或者读数据到内存中,就是输入流。

一些基本的输入输出函数如下。

在这里插入图片描述

比如,fputc就是写一个字符进去,fgetc就是读一个字符。


//打开文件
	FILE* pf = fopen("data.txt","w");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//读文件
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	//fputc第一个参数为输入的字符,第二个使对应文件的指针

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

在这里插入图片描述

写入了abc三个字符。

fputc和fgetc每次读/写一个字符后,文件指针pf会向后移动,类似strtok函数。会记录上一次输入/输出的地址。

如果不这样,那岂不是一直在一个位置重复写入或者读文件了。

接下来看看fgetc读取字符


//打开文件
	FILE* pf = fopen("data.txt","r");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//读文件

	int a = fgetc(pf);
	printf("%c", a);
	a = fgetc(pf);
	printf("%c", a);
	a = fgetc(pf);
	printf("%c",a);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;

执行结果

在这里插入图片描述

这就是顺序读写,按着顺序读入写入。

当然,有顺序读写,就会有随机读写

从字面意思就能看到,随机读写emmm。

当然,除了fgetc这类,fgets自然就是读取一行了(只会读/写一行哦)

如果你用这类函数输出在标准输入或者标准输入(stdout或者stdin)上,他和printf,scanf没什么区别。

接下来,我们来看二进制的读和写

二进制读写

fwirte

在这里插入图片描述

以二进制的形式将内容写入文件中

第一个参数是你要写入数据的数据地址,第二个参数是一个类型的大小(字节)。第三个参数是你要写入几个数据,第四个则是你选定写入的流。


struct S{
	int n;
	double d;
	char name[10];
};

int main()
{
	struct S s = { 10, 3.14, "zhangsan" };
	//打开文件
	FILE* pf = fopen("data.txt","wb");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//读文件
	fwrite(&s,sizeof(s),1,pf);

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

如上代码会将数据以二进制的形式写入data.txt

虽然我们看不懂,但是能看到zhangsan是我们输入的内容

在这里插入图片描述

fread

以二进制的形式读

在这里插入图片描述

和fwirte一样,只不过buffer不是const形式了,因为我们要将数据读入该指针指向的目标。


struct S{
	int n;
	double d;
	char name[10];
};

int main()
{
	struct S s = {0};
	//打开文件
	FILE* pf = fopen("data.txt","rb");
	if (pf == NULL){
		perror("fopen");
		return -1;
	}
	//读文件
	fread(&s,sizeof(struct S),1,pf);
	printf("%d  %lf  %s\n",s.n,s.d,s.name);

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

在这里插入图片描述

总结

到此这篇关于C语言中文件操作的文章就介绍到这了,更多相关C语言文件操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中炫酷的文件操作实例详解

本文链接: https://lsjlt.com/news/154623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言中炫酷的文件操作实例详解
    目录什么是文件程序文件数据文件 (本文重点)文件名文件的打开和关闭文件指针文件函数相对路径与绝对路径输入输出流二进制读写fwirtefread总结什么是文件 磁盘上的文件是文件 但是...
    99+
    2024-04-02
  • C语言中的文件操作详解
    目录1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开和关闭3.1文件指针3.2文件的打开和关闭4.文件的顺序读写5.文件的随机读写5.1fsee...
    99+
    2024-04-02
  • C语言文件操作详解
    目录一、什么是文件二、文件缓冲区三、文件指针四、文件的打开和关闭。总结一、什么是文件 在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。 程序文件: 包括源程序文件(后缀为....
    99+
    2024-04-02
  • C语言中的文件操作实例分析
    这篇文章主要介绍了C语言中的文件操作实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中的文件操作实例分析文章都会有所收获,下面我们一起来看看吧。1.为什么使用文件在学习结构体时,写了一个简易的通讯录...
    99+
    2023-07-02
  • C语言实现对文件进行操作的示例详解
    目录前言文件指针文件的打开和关闭文件的打开方式文件读写函数二进制方式存储文件对文件进行拷贝文件随机读写函数文件缓冲区前言 文件操作 在运行程序的时候,此时数据是存放在内存中,当程序退...
    99+
    2023-05-15
    C语言实现文件操作 C语言文件操作 C语言文件
  • C语言文件的操作实例分析
    这篇文章主要介绍了C语言文件的操作实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言文件的操作实例分析文章都会有所收获,下面我们一起来看看吧。一、为什么使用文件当我们写一些项目的时候,我们应该要把写的...
    99+
    2023-06-30
  • C语言文件操作实例分析
    这篇文章主要介绍了C语言文件操作实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言文件操作实例分析文章都会有所收获,下面我们一起来看看吧。一、为什么使用文件?当我们在编写一个项目的时候,自然而然想到要...
    99+
    2023-07-02
  • 详解C语言之文件操作(上)
    目录什么是文件程序文件数据文件文件名文件类型文件缓冲区文件指针 文件的打开和关闭输入和输出总结什么是文件 磁盘上的文件就是文件。 在程序设计中,我们一般谈的文件有两种:程序...
    99+
    2024-04-02
  • 详解C语言之文件操作下)
    目录文件的随机读写fseek函数ftell函数rewind函数文件结束判定feof函数和ferror函数总结文件的随机读写 之前的函数只能实现顺序读写,而实现随机读写需用fseek函...
    99+
    2024-04-02
  • C语言超详细讲解文件的操作
    目录一、为什么使用文件二、什么是文件1.程序文件2.数据文件3.文件名三、文件指针四、文件的打开和关闭五、文件的顺序读写六、文件的随机读写fseekftellrewind七、文件结束...
    99+
    2024-04-02
  • C语言进阶之文件操作详解
    目录0. Intro1. 文件名2. 文件的打开和关闭2.1 文件指针2.2 打开和关闭文件3. 文件顺序读写3.1 利用以上函数实现拷贝文件操作3.2 二进制的读写3.3 格式化输...
    99+
    2024-04-02
  • C语言文件操作详情(一)
    目录前言:一、文件是什么二、文件类型三、文件缓冲区四、文件指针五、文件的打开和关闭前言: 文件操作重要吗? 当然重要:如果我们想让自己的程序拥有记忆功能,那就需要把要记忆的信息和数据...
    99+
    2024-04-02
  • C语言文件操作详情(二)
    目录前言一、文件的顺序读写函数fgetc和fputcfgets和fputsfscanf 和 fprintf对比一组函数fraed 和 fwriite二、文件的随机读写函数fseek ...
    99+
    2024-04-02
  • C语言文件操作的入门详解教程
    目录一.一些需要掌握的知识点1.文件名2.文件类型3.数据流4.文件缓冲区5.文件指针二.与文件操作相关的一些函数 1.文件的打开及关闭2.文件的顺序读写3.文件的随机读写...
    99+
    2024-04-02
  • C语言文件操作之fread函数详解
    目录前言一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕...
    99+
    2024-04-02
  • 一文详解C语言操作符
    目录一、基础篇1.算数操作符2.单目操作符3.逻辑操作符4.条件操作符5.逗号表达式6.下标引用,函数调用和结构体成员访问7.关系操作符 二、进阶篇1.二进制2.移位操作符...
    99+
    2023-05-20
    C语言操作符详解 C语言操作符
  • Go语言文件读写操作案例详解
    目录基本介绍文件基本操作读操作写操作写操作案例查看文件或目录是否存在拷贝文件基本介绍 文件,对我们并不陌生,文件是数据源(保存数据的地方)的 一种 输入流和输出流 文件在程序中是以流...
    99+
    2024-04-02
  • C语言中如何实现文件操作
    这篇文章主要介绍了C语言中如何实现文件操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么使用文件我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候...
    99+
    2023-06-29
  • C语言文件操作详解以及详细步骤
    目录一、为什么使用文件?二、什么是文件?1.程序文件2.数据文件3.文件名三、文件的打开和关闭1.文件指针2.文件的打开和关闭3.文件的顺序读写四、fseek函数五、ftell函数六...
    99+
    2024-04-02
  • R语言对CSV文件操作实例讲解
    在 R 语言中,我们可以从存储在 R 语言环境外的文件中读取数据。 我们还可以将数据写入将被操作系统存储和访问的文件。 R 语言可以读取和写入各种文件格式,如​csv&#...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作