第五十八天学习记录:C语言进阶:文件操作1

这篇具有很好参考价值的文章主要介绍了第五十八天学习记录:C语言进阶:文件操作1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是文件

在程序设计中,一般有两种文件:程序文件、数据文件

程序文件

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

数据文件

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

文件

一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含3部分:文件路径+文件名主干+文件后缀
例如:C:\code\test.txt
为了方便起见,文件标识常被称为文件名

文件类型

根据数据的组织形式,数据文件被称为文本文件或者二进制文件
数据在内存中以二进制的形式存储,如果不加以转换的输出到外存,就是二进制文件
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt", "wb");//wb用二进制的形式写
	fwrite(&a, 4, 1, pf);//二进制的形式写到文件中
	//写一个四字节的数据
	fclose(pf);
	pf = NULL;
	return 0;
}

该代码会在工程目录下生成如下文件
第五十八天学习记录:C语言进阶:文件操作1
直接打开是乱码:
第五十八天学习记录:C语言进阶:文件操作1
用VS二进制方式打开:
第五十八天学习记录:C语言进阶:文件操作1
第五十八天学习记录:C语言进阶:文件操作1
因为是小端模式,得出最终表现的十六进制形式是:27 10,转换成16进制就是10000

文件缓冲区

ANSIC标准采用缓冲文件系统处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

第五十八天学习记录:C语言进阶:文件操作1
上图转自比特科技。

文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE
第五十八天学习记录:C语言进阶:文件操作1
在编写程序的时候,在打开文件的同时,都会返回一个FILE* 的指针变量指向该文件,也相当于建立了指针和文件的关系。
ANSIC规定使用fopen函数来打开文件,fclose来关闭文件。

FILE* fopen(const char* filename,const char* mode);
int fclose(FILE* stream);

打开方式如下:

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

#include <stdio.h>

int main()
{
	//打开文件test.txt
	//相对路径
	//..表示上一级路径
	//.表示当前路径
	//fopen("../../test.txt","r");
	//fopen("test.txt","r");
	//绝对路径写法
	fopen("F:\\aha\\test.txt","r");
	return 0;
}

问://fopen(“./test.txt”,“r”); //fopen(“test.txt”,“r”);有什么区别?
ChatAI答:
这两个语句的作用都是打开文件"test.txt",并以只读模式®进行访问。但它们的路径表示方式略有不同。

第一个语句 fopen("./test.txt", "r") 中的 “./” 表示当前路径,也就是表示在当前目录下寻找名为"test.txt"的文件。这个语句会在程序的当前工作目录下寻找"test.txt"这个文件,而不会去其他目录下查找。如果当前工作目录下不存在这个文件,则无法打开它。

第二个语句 fopen("test.txt", "r") 则表示在文件的相对路径中寻找名为"test.txt"的文件。如果这个相对路径中的文件存在,程序就会打开它。但是如果这个文件不存在,程序将无法打开它。

因此,当程序运行的环境有多个工作目录时,使用第一个语句可以更加确保打开正确的文件。而当程序运行的环境中只有一个工作目录时,这两个语句都可以正确地打开文件。

文件的顺序读写

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

写文件

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
	FILE* pfWrite=fopen("F:\\aha\\test.txt","w");
	if (pfWrite == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//写文件
	fputc('C', pfWrite);
	fputc('h', pfWrite);
	fputc('u', pfWrite);
	fputc('n', pfWrite);
	fputc('g', pfWrite);
	//关闭文件
	fclose(pfWrite);
	pfWrite = NULL;
	return 0;
}

读文件

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
	FILE* pfRead = fopen("F:\\aha\\test.txt", "r");
	if (pfRead == NULL)
	{
		printf("%s\n", strerror(errno));
		return 0;
	}
	//读文件
	printf("%c", fgetc(pfRead));
	printf("%c", fgetc(pfRead));
	printf("%c", fgetc(pfRead));
	printf("%c", fgetc(pfRead));
	printf("%c", fgetc(pfRead));
	//关闭文件
	fclose(pfRead);
	pfRead = NULL;
	return 0;
}

从键盘输入
输出到屏幕
键盘&屏幕都是外部设备

键盘-标准输入设备 stdin
屏幕-标准输出设备 stdout
是一个程序默认打开的两个流设备
stdin FILE*
stdout FILE*
stderr FILE*

问:介绍一下stdin stdout stderr
ChatAI答:
在C语言中,stdinstdoutstderr 是三个重要的流(stream)标准,它们都是预定义的指针,指向标准输入流、标准输出流和标准错误流。

  1. stdin:标准输入流。它是一种输入数据的终端,通常来自于键盘或其他输入设备。可以使用scanf()等函数从stdin中读取输入数据。

  2. stdout:标准输出流。它是一种输出数据的终端,通常是显示器或其他输出设备。可以使用printf()等函数将数据输出到stdout中。

  3. stderr:标准错误流。它用于输出错误信息和诊断信息。通常也是输出到显示器,但与stdout不同的是,stderr的输出不会被标准输出重定向到其他设备,而会直接输出到显示器。

这些流还可以通过文件重定向来实现输入/输出操作,例如,将标准输出重定向到文件中,将标准输入从文件中读取数据等等。这些流在很多操作系统的各种应用程序都是必不可少的,它们的使用使得进程的输入、输出和错误处理更加灵活和方便。文章来源地址https://www.toymoban.com/news/detail-469095.html

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int ch = fgetc(stdin);
	fputc(ch, stdout);
	return 0;
}

到了这里,关于第五十八天学习记录:C语言进阶:文件操作1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 第五十八章 Unity 发布PC平台

    本章节我们介绍一些如何打包游戏到PC平台,这里重点介绍如何制作Windows操作系统下的游戏包。首先,我们创建一个“PcDemo”工程,然后简单布置一下场景内容,如下 想要打包发布Unity项目,我们可以在菜单栏选择“File”→ “Build Settings”菜单命令。 在Platform列表中显然了我

    2024年02月11日
    浏览(42)
  • 从零开始的力扣刷题记录-第四十八天

    给你一个下标从 0 开始的数组 nums ,数组大小为 n ,且由 非负 整数组成。 你需要对数组执行 n - 1 步操作,其中第 i 步操作(从 0 开始计数)要求对 nums 中第 i 个元素执行下述指令: 如果 nums[i] == nums[i + 1] ,则 nums[i] 的值变成原来的 2 倍,nums[i + 1] 的值变成 0 。否则,跳过

    2024年02月09日
    浏览(51)
  • python爬虫学习第二十八天-------了解scrapy(二十八天)

    🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨  hello,兄弟姐妹们!我是喔的嘛呀。今天我们首先来了解scrapy。为后面的学习打下基础。 一、scrapy是什么?

    2024年04月25日
    浏览(41)
  • C++学习第十八天(函数模板)

    模板 1.1 模板的概念 模板就是 建立通用的模具,大大提高复用性,特点:模板不可以直接使用,他只是一个框架;模板的通用并不是万能的。 1.2 函数模板语法 函数模板的作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体定制,用一个虚拟的类型来代表。

    2024年02月13日
    浏览(34)
  • C++学习第十八天----switch语句

    1. ?:运算符         条件运算符,又叫三元运算符;         该运算符的通用格式为:                 expression1?expression2 :expression3;         意义是假如1为true,则整个条件表达式的值为2的值,否则为3的值; 2.switch语句         通用格式为:            

    2024年02月11日
    浏览(40)
  • Python学习笔记第六十八天(Matplotlib 饼图)

    饼图(Pie Chart)是一种常用的数据可视化图形,用来展示各类别在总体中所占的比例。 我们可以使用 pyplot 中的 pie() 方法来绘制饼图。 pie() 方法语法格式如下: 参数说明: x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。 explode:数组,表示各个扇形之间

    2024年02月08日
    浏览(36)
  • 网络安全进阶学习第五课——文件上传漏洞

    大部分的网站和应用系统都有上传功能,如用户头像上传,图片上传,文档上传等。 由于对上传文件 未作过滤 或 过滤机制不严(文件后缀或类型) ,导致恶意用户可以上传 脚本文件 ,通过上传文件可以达到控制网站权限的目的。 攻击者可获得网站控制权限; 查看、修改

    2024年02月06日
    浏览(39)
  • Java复习第十八天学习笔记(MVC,三层架构,分页),附有道云笔记链接

    【有道云笔记】十八 4.4 MVC模式、三层架构、分页 https://note.youdao.com/s/PRQ62OUV 一、MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范, 用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,

    2024年04月12日
    浏览(49)
  • 【AI视野·今日NLP 自然语言处理论文速览 第五十三期】Thu, 12 Oct 2023

    AI视野 ·今日CS.NLP 自然语言处理论文速览 Thu, 12 Oct 2023 Totally 69 papers 👉 上期速览 ✈更多精彩请移步主页 To Build Our Future, We Must Know Our Past: Contextualizing Paradigm Shifts in Natural Language Processing Authors Sireesh Gururaja, Amanda Bertsch, Clara Na, David Gray Widder, Emma Strubell NLP 正处于一个颠覆性变

    2024年02月07日
    浏览(43)
  • 【AI视野·今日NLP 自然语言处理论文速览 第五十四期】Fri, 13 Oct 2023

    AI视野 ·今日CS.NLP 自然语言处理论文速览 Fri, 13 Oct 2023 Totally 75 papers 👉 上期速览 ✈更多精彩请移步主页 Tree-Planner: Efficient Close-loop Task Planning with Large Language Models Authors Mengkang Hu, Yao Mu, Xinmiao Yu, Mingyu Ding, Shiguang Wu, Wenqi Shao, Qiguang Chen, Bin Wang, Yu Qiao, Ping Luo 本文研究闭环任务规

    2024年02月07日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包