IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> C语言文件操作 -> 正文阅读

[大数据]C语言文件操作

C语言文件操作

1.为什么使用文件

当我们在编写代码时有时会碰到需要将数据记录下来的时候,而不是让数据随着程序的结束而消失。这就是时数据持久化的问题。一般情况下可以将数据存放在磁盘文件或者存放在数据库等方式,使用文件操作可以将数据放在电脑的硬盘上,从而保证数据的持久化。

2.什么是文件

在程序设计中,我们一般认为文件有两种类型:程序文件和数据文件。

文件的打开与关闭

在缓冲文件系统中由文件指针来管理文件。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(如文件名,文件状态,以及文件指针当前的位置等)。这些信息是保存在一个结构体变量中的,该结构体类型是有系统声明的,取名为FILE.
不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
每当打开一个文件的时候,系统会根据文件的情况自动创建FILE结构体的变量,我们使用不必关心细节。

FILE* pf;//文件指针变量

定义pf是一个指向FILE类型数据的指针变量,可以使pf指向某个文件的文件信息区,通过文件指针变量就可以找到该文件。

3.文件的打开与关闭

文件在进行读写操作之前都应该先打开文件,在使用结束后应该关闭文件。并且返回一个FILE*的指针变量指向该文件,建立指针与文件之间的关系。
ANSIC规定使用fopen函数来打开文件,fclose来关闭文件。

FILE* fopen( const char * filename ,char char * mode);//打开文件
int fclose( FILE * stream );//关闭文件

打开方式如下:

文件使用方式含义如果指定文件不存在
“r”(只读)为了输入数据,打开一个已经存在的文本文件出错
“w”(只写)为了输出数据,打开一个文本文件建立一个新的文件
“a”(追加)向文本文件尾添加数据建立一个新的文件
“rb”(只读)为了输入数据,打开一个二进制文件出错
“wb”(只写)为了输出数据,打开一个二进制文件建立一个新的文件夹
“ab”(追加)向一个二进制文件尾添加数据出错
“r+”(读写)为了读和写,打开一个文本文件出错
“w+”(读写)为了读和写,建立一个新的文件夹建立一个新的文件夹
“a+”(读写)打开一个文件,在文件尾进行读写建立一个新的文件
“rb+”(读写)为了读和写打开一个二进制文件出错
“wb+”(读写)为了读和写,新建一个二进制文件建立一个新的文件
“ab+”(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

代码如下:

#include<stdio.h>
int main()
{
//打开文件
    FILE* pf = fopen("data.txt","w");//以只写的方式打开
    if( pf == NULL)  //这里一定要判断函数的返回值
    {
        perror("fopen");//打印错误信息
        return -1;//终止程序
    }
    //写文件
    //在文件使用完毕后一定要关闭文件
    fclose(pf);
    pf = NULL;
    return 0;
}

4.文件的顺序读写

功能函数名适用于
字符输入函数fgtec所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

当我们c语言程序运行起来的时候,就默认打开三个流
标准输入流 stdin
标准输出流 stdout
标准错误流 stderr

5.文件函数举例

  1. fputc不仅能将信息写进文件,同样也可以输出显示在屏幕上。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	FILE* fp = fopen("data.txt", "w");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	//写文件
	fputc('L', fp);
	fputc('O', fp);
	fputc('V', fp);
	fputc('E', fp);
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

在这里插入图片描述

  1. fgetc一次读一个字符,不仅可以从键盘读取,也可以从文件中获取。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	FILE* fp = fopen("data.txt", "r");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	char temp = 0;
	temp = fgetc(fp);
	printf("%c ", temp);
	temp = fgetc(fp);
	printf("%c ", temp);
	temp = fgetc(fp);
	printf("%c ", temp);
	temp = fgetc(fp);
	printf("%c ", temp);
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

在这里插入图片描述

  1. fgets
    适用于所以流
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	FILE* fp = fopen("data.txt", "r");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	char temp[10] = {0};
	fgets(temp, 6, fp);//fgets一次读一行,
	printf("%s", temp);
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

在这里插入图片描述

  1. fputs
    fputs也适用于所有流
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	FILE* fp = fopen("data.txt", "w");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	fputs("LOVE",stdout);//在屏幕输出
	fputs("LOVE YOU", fp);//在文件输出
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

在这里插入图片描述

  1. fprintf
    以文本方式写入
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


struct s {
	int a;
	float b;
	char x;
};
int main()
{
	struct s  d = { 5,3.14,'a' };
	FILE* fp = fopen("data.txt", "w");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	fprintf(fp, "%d %lf %c", d.a,d.b,d.x);//在文件输出
	fprintf(stdout, "%d %lf %c", d.a, d.b, d.x);//在屏幕输出
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

  1. scanf
    格式化输入
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


struct s {
	int a;
	float b;
	char x;
};
int main()
{
	struct s  d = {0};
	char temp[10] = { 0 };
	FILE* fp = fopen("data.txt", "r");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	fscanf(fp, "%d %lf %c", &(d.a), &(d.b), &(d.x));//从文件输入
	fscanf(stdin, "%s", temp);//从屏幕输入
	printf("%s", temp);
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

  1. fwrite
    二进制写 对象只能是文件
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


struct s {
	int a;
	float b;
	char x;
};
int main()
{
	struct s  d = {0};
	FILE* fp = fopen("data.txt", "r");//打开文件
	if (fp == NULL)
	{
		perror("fopen");
		return -1;
	}
	//写文件
	fread(&d, sizeof(d), 1, fp);//以二进制形式写
	//关闭文件
	fclose(fp);
	fp = NULL;
	return 0;
}

在这里插入图片描述

6.文件的随机读写

  1. fseek
    根据文件指针的位置和偏移量定位文件指针
int fseek ( FILE * stream, long int offset, int origin );
  1. ftell
    返回文件指针相对于起始位置的偏移量。
long int ftell( FILE * stream );
  1. rewind
    让文件指针的位置回到文件的起始位置。
void rewind ( FILE * stream );
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	//打开文件
	FILE* fp = fopen("data.txt", "r");
	if (NULL == fp)
	{
		perror("fopen");
		return 0;
	}
	fseek(fp, 5, SEEK_SET);//从开始位置往后偏移5位
	char  temp = fgetc(fp);
	printf("%c\n", temp);


	//计算指针相对于起始位置的偏移量5+1
	int ret = ftell(fp);
	printf("%d\n", ret);

	//让文件指针回到文件的其实位置
	rewind(fp);
	char a = fgetc(fp);
	printf("%c\n", a);

	fclose(fp);
	fp = NULL;
	return 0;
}

在这里插入图片描述
文件操作函数就介绍到这里,希望大家指正。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:21:27  更:2021-09-29 10:23:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:25:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码