当前位置: 首页 > news >正文

C语言——文件操作

目录

前言

一什么是文件

1程序文件

2数据文件

3文件名

二文件的打开与关闭

1文件指针

2fopen

3fclose 

三文件的读与写

1文件的顺序读写

1.1fputc fgetc

1.2fputs fgets

1.3fprintf fscanf

1.4fwrite fread

1.5文本文件和二进制文件

2文件的任意读写

1fseek

2ftell

3rewind

四文件读取结束

五文件缓冲区

六改写通讯录


前言

在前面写通讯录时,我们发现:每次程序结束后通讯录内的消息就不见了,原因是:信息都是在内存中储存;如果我们要想把信息存储起来,就需要和文件打交道,那么C语言中又是怎么对文件进行操作呢?看完这篇文章或许你就懂了!

一什么是文件

磁盘上保存的数据都叫做文件;
在程序设计中,我们一般谈的文件有两种:程序文件、数据文件;

1程序文件

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

2数据文件

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

3文件名

用来标识文件唯一性;文件名通常是一个完整的文件路径(c:\code\test.txt)

二文件的打开与关闭

1文件指针

缓冲文件系统中,有个概念叫“文件类型指针”,简称“文件指针”;                                                      打开一个文件时都会在内存中开辟一个结构体,用来储存文件的相关信息(文件名,大小...),C语言把这种结构体定义为FILE:

struct _iobuf {char* _ptr;int _cnt;char* _base;int _flag;int _file;int _charbuf;int _bufsiz;char* _tmpfname;
};
typedef struct _iobuf FILE;

而FILE通常是以指针的形式:                                                                                                    一是程序员方便使用

二是在内存中可能有很多FILE结构体,要想更好地管理它们:用类似链表的方式实现

2fopen

第一个参数是文件名(可以是相对路径(.\ ..\进行表示)或者绝对路径(完整路径));

第二个参数是你要用什么方式打开文件

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

3fclose 

与申请内存类似:文件操作完后也要对文件进行关闭

使用:

#include<stdio.h>int main()
{FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen error");return 1;}//使用...fclose(pf);pf = NULL;return 0;
}

注意:对于文件后缀名:建议把它进行开启,否则可以会出现以下错误:

明明在当前路径下有该文件,就是找不到!原来该文件的后缀名是被隐藏掉了,真正的文件名是:

三文件的读与写

1文件的顺序读写

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

这里所说的:输入输出流是怎么一回事?

流是一种抽象的概念,我们可将其看成‘水流’(数据流):当我们要接水时:我们可以用盆接,用碗接,用手接...同样,我们要接收数据(输入流)也有多种方式,fgetc,fgets...用水的情况也有多种,我们使用数据(输出流)处理具体情况的方式也有所不同,决定了程序员在不同情况下要掌握不同函数调用来使用数据的能力;常见的输入输出流的例子:                 我们平时说:用scanf接收数据,把数据打印到屏幕上:本质上就是输入输出流;那么你可能会说:我在使用scanf或者printf时是不用传入FILE*的指针变量就能完成,这怎么可能是输入输出流?

其实:在程序运行时,程序默认为我们打开了三个流:stdout(标准输出流),stdin(标准输入流),stderror(标准错误流),这三个变量都是FILE*类型!

使用scanf或者printf时底层默认使用指定的标准流来处理数据的~

1.1fputc fgetc

向指定流里面写入/读取一个字符

使用:data.txt文件写入26个字母

int main()
{FILE* pf1 = fopen("data.txt", "w");if (pf1 == NULL){perror("fopen error");return 1;}char ch = 0;for (ch = 'a'; ch <= 'z'; ch++){fputc(ch, pf1);}fclose(pf);pf = NULL;return 0;
}

data.txt文件读取26个字母

int main()
{FILE* pf = fopen("data.txt", "r");//注意这个文件操作的方式是"r"if (pf == NULL){perror("fopen error");return 1;}char ch = 0;//fgetc读到文件结尾后返回EOF(-1)while (1){ch = fgetc(pf);if (ch == EOF) break;printf("%c ", ch);}fclose(pf);pf = NULL;return 0;
}

使用stdout则将数据输出到屏幕上,达到与printf一样的效果

1.2fputs fgets

向指定流里写入/读取一行字符串

向data.txt中写入两行字符串

int main()
{FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen error");return 1;}fputs("hello\n", pf);fputs("world\n", pf);fclose(pf);pf = NULL;return 0;
}

从data.txt读取第一行的三个字符

#include<stdio.h>int main()
{FILE* pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen error");return 1;}char arr[10] = { 0 };fgets(arr, 3+1, pf);//读取的字符总数包含了\n,所以决定读n个字符参数传n+1printf("%s", arr);fclose(pf);pf = NULL;return 0;
}

1.3fprintf fscanf

 

格式化数据(如结构体)写入/读取数据

将格式化数据写入data.txt 

#include<stdio.h>struct S
{float f;char c;int i;
};int main()
{FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen error");return 1;}struct S s = { 3.14,'w',100 };fprintf(pf, "%f-%c-%d", s.f, s.c, s.i);fclose(pf);pf = NULL;return 0;
}

把data.txt里的格式化数据读出来(读出的格式需要与写入的格式保持一致

#include<stdio.h>struct S
{float f;char c;int i;
};int main()
{FILE* pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen error");return 1;}struct S s = {0};//fprintf(pf, "%f-%c-%d", s.f, s.c, s.i);fscanf(pf, "%f-%c-%d", &(s.f), &(s.c), &(s.i));//格式保存一致printf("%f %c %d", s.f, s.c, s.i);fclose(pf);pf = NULL;return 0;
}

1.4fwrite fread

以二进制格式写入/读取

使用fwrite向文件写进5个数:

#include<stdio.h>int main()
{FILE* pf = fopen("data.txt", "wb");if (pf == NULL){perror("fopen error");return 1;}int arr[] = { 1,2,3,4,5 };fwrite(arr, sizeof(int), 5, pf);fclose(pf);pf = NULL;return 0;
}

 

发现都是乱码(二进制),那这些到底是不是我们写进去的数据呢?

用fread读取后打印出来看看:

#include<stdio.h>int main()
{FILE* pf = fopen("data.txt", "rb");if (pf == NULL){perror("fopen error");return 1;}int arr[5] = {0};fread(arr, sizeof(int), 5, pf);for (int i = 0; i < 5; i++){printf("%d ", arr[i]);}fclose(pf);pf = NULL;return 0;
}

前面的三组函数都是以文本文件进行写入/读取,而fwrite/fread以二进制文件进行写入/读取,这两者要怎么理解?

1.5文本文件和二进制文件

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

如果用一个整数以二进制格式写到文件中,要想看到对内容进行‘翻译’:可以将二进制文件拖到VS中以二进制编译器的形式打开:内容是整数在内存中的储存形式(vs:小端储存的十六进制)

#include <stdio.h>
int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");fwrite(&a, 4, 1, pf);//二进制的形式写到文件中fclose(pf);pf = NULL;return 0;
}

2文件的任意读写

1fseek

根据文件指针的位置和偏移量来定位文件指针(想读哪个文件指针就定位到哪里)

关于origin的参数: 

使用:通过三个参数找到文件的最后一个字符

#include<stdio.h>int main()
{FILE* pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen error");return 1;}//data.txt的数据:abcdechar ch=fgetc(pf);printf("%c\n", ch);//读出最后一个字符e//fseek(pf, -1, SEEK_END);//SEEK_END定位到的是\n,往前偏移一位才能找到e//fseek(pf, 4, SEEK_SET);//开始位置完后偏移4找到e(要计算)fseek(pf, 3, SEEK_CUR);//当前位置往后偏移3找到e(要计算)ch = fgetc(pf);printf("%c", ch);fclose(pf);pf = NULL;return 0;
}

2ftell

 

返回文件指针相对于起始位置的偏移量

3rewind

让文件指针从起始位置开始

四文件读取结束

网上或者教材上很多说:用 feof 函数进行判断文件是否结束,其实是不严谨的;                        feof作用:当文件读取结束后,判断是否遇到文件结束标志而结束                                                  与ferrof作用对比: 当文件读取结束后,判断是否遇到错误而结束

1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )
2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数                                              (如果正常使用write/read 写入/读取多少个,正常来说是会返回写入/读到的个数)

使用:将test1.txt的内容拷贝到test2.txt中

#include <stdio.h>
int main(void)
{int c; // 注意:int,非charFILE* fp1 = fopen("test1.txt", "r");if (!fp1){perror("File opening failed");return 1;}FILE* fp2 = fopen("test2.txt", "w");if (!fp2){perror("File opening failed");fclose(fp1);fp1 = NULL;return 2;}//fgetc 当读取失败的时候或者遇到文件结束的时候,都会返回EOFwhile ((c = fgetc(fp1)) != EOF) // 标准C I/O读取文件循环{fputc(c, fp2);}fclose(fp1);fp1 = NULL;fclose(fp2);fp2 = NULL;return 0;
}

五文件缓冲区

ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”

写入文件的数据先保存在“文件缓冲区”中,等到调用相关函数把文件缓冲区的数据刷新到文件中(close()),才是真正地把数据保存在文件中

scanf()读键盘数据也是同理:所以我们在用scanf读入字符串时要注意缓冲区的'\n'问题

//测试文件缓冲区存在的代码#include <stdio.h>
#include <windows.h>
//VS2013 WIN10环境测试
int main()
{FILE* pf = fopen("test.txt", "w");fputs("abcdef", pf);//先将代码放在输出缓冲区printf("睡眠10秒-已经写数据了,打开test.txt文件,发现文件没有内容\n");Sleep(10000);printf("刷新缓冲区\n");fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)printf("再睡眠10秒-此时,再次打开test.txt文件,文件有内容了\n");Sleep(10000);fclose(pf);//fclose在关闭文件的时候,也会刷新缓冲区pf = NULL;return 0;
}

六改写通讯录

学习完文件操作后,是时候解决前言提出的问题:把通讯录改造成不受程序关闭而通讯录信息丢失

1.在程序退出时,把当前通讯录的信息保存在Contact.txt文件中(使用fwrite)                                    2.在程序刚开始初始化通讯录时,把Contact.txt文件的数据加载到内存中(使用fread)

void CheckCapacity(Contact* con)
{if (con->sz == con->capacity){//扩容Mess* ptr = realloc(con->message, (con->capacity + Default_Size) * sizeof(Mess));if (ptr != NULL){con->message = ptr;con->capacity += Default_Size;printf("扩容成功\n");}else{perror("realloc error");return;}}
}void InitContact(Contact* con)
{//文件版本:对上一次的通讯录数据进行拷贝con->message = (Mess*)malloc(Default_Size * sizeof(Mess));if (con->message == NULL){perror("malloc error");return 1;}con->sz = 0;con->capacity = Default_Capacity; FILE* pf = fopen("Contact.txt", "rb");if (pf == NULL){perror("fopen fail");return 1;}Mess tmp = { 0 };while (fread(&tmp, sizeof(Mess), 1, pf)){CheckCapacity(con);con->message[con->sz] = tmp;con->sz++;}
}void SaveContact(Contact* con)
{FILE* pf = fopen("Contact.txt", "wb");for (int i = 0; i < con->sz; i++){fwrite(con->message + i, sizeof(Mess), 1, pf);}
}

以上便是全部内容,有问题欢迎在评论区指正,感谢观看!

相关文章:

C语言——文件操作

目录 前言 一什么是文件 1程序文件 2数据文件 3文件名 二文件的打开与关闭 1文件指针 2fopen 3fclose 三文件的读与写 1文件的顺序读写 1.1fputc fgetc 1.2fputs fgets 1.3fprintf fscanf 1.4fwrite fread 1.5文本文件和二进制文件 2文件的任意读写 1fseek …...

嵌入式知识点总结 C/C++ 专题提升(七)-位操作

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值&#xff0c;不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…...

26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置

在实际开发过程中&#xff0c;项目需求的变更和增加是常见的情况&#xff0c;因此这篇文章我们就模拟一下项目需求新增的情况。 一、需求 项目经理今天提出了新的功能&#xff0c;需要增加重置密码、安全设置、修改用户名、注销账户这四个功能&#xff0c;这四个功能必须是独…...

Git 分支管理与多人协作实战指南

目录 1.分支管理&#xff1a; 1.1.理解分支&#xff1a; 1.2.创建分支 1.3.切换分支 1.4.合并分支 1.5.删除分支 2.合并冲突 3.分支管理策略 分支策略 4.bug分支 5.删除临时分支 git branch -d 和 git branch -D的区别 6.多人协作 6.1.多人协作一 6.2.多人协作二…...

使用pyboard、micropython和tja1050进行can通信

单片机和can收发器之间tx、rx不需要交叉接线&#xff01;&#xff01;&#xff01; tja1050的rx接Y3、tx接Y4 from pyb import CANcan CAN(1) can.init(modecan.NORMAL, prescaler6, sjw1, bs14, bs22, auto_restartTrue) # 1Mbps的配置&#xff0c;本文使用的micropython1.…...

新能源监控平台都管理哪些数据

北理新源信息科技有限公司&#xff08;简称“北理新源”&#xff09;依托北京理工大学电动车辆国家工程研究中心&#xff0c;建设和运营了“新能源汽车国家监测与管理平台”。该平台是国家级的新能源汽车数据监管平台&#xff0c;主要负责对新能源汽车的运行数据进行采集、监测…...

Go学习:常量

变量&#xff1a;程序运行期间&#xff0c;可以改变的量&#xff0c;变量声明需要使用 var 常量&#xff1a;程序运行期间&#xff0c;不可以改变的量&#xff0c;常量声明需要使用 const 目录 1. 常量不允许修改 2. 常量赋值不使用 : 3. 常量能够自动推导类型 1. 常量不允许…...

Apache Tika 详解

Apache Tika是一个开源的、跨平台的库&#xff0c;专门用于检测、提取和解析多种文件格式的元数据。以下是对Apache Tika的详细解析&#xff1a; 一、概述 Apache Tika旨在为各种类型的数据提取提供一个单一的API&#xff0c;它支持多种文件格式&#xff0c;包括文档、图片、…...

第12章:Python TDD完善货币加法运算(一)

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

KNN的调参方法

目录 1. K 值&#xff08;邻居数 K&#xff09;的选择2. 距离度量方式2.1 常见距离度量2.2 如何选择距离度量 3. 权重策略&#xff08;weights&#xff09;4. 特征预处理4.1 特征缩放&#xff08;标准化/归一化&#xff09;4.2 处理异常值 5. 特征选择或降维6. 使用交叉验证来综…...

mac 电脑上安装adb命令

在Mac下配置android adb命令环境&#xff0c;配置方式如下&#xff1a; 1、下载并安装IDE &#xff08;android studio&#xff09; Android Studio官网下载链接 详细的安装连接请参考 Mac 安装Android studio 2、配置环境 在安装完成之后&#xff0c;将android的adb工具所在…...

P3934 [Ynoi2016] 炸脖龙 I Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​). 有 m m m 个操作&#xff0c;分以下两种&#xff1a; modify ⁡ ( l , r , k ) \operatorname{modify}(l,r,k) modify(l,r,k)&#xff1a;对每个 i ∈ [ l , r ] i \in [l…...

数据库-多表查询

介绍&#xff08;什么是多表查询&#xff1f;&#xff09; 多表查询&#xff1a;查询时从多张表中获取所需数据 单表查询的SQL语句&#xff1a;select 字段列表 from 表名; 那么要执行多表查询&#xff0c;只需要使用逗号分隔多张表即可 如&#xff1a; select 字段列表 from …...

PID控制的优势与LabVIEW应用

PID控制&#xff08;比例-积分-微分控制&#xff09;已在工业控制领域得到广泛应用&#xff0c;尤其在实时控制和自动化系统中&#xff0c;其核心优点是简单、稳定且高效。尽管许多现代控制方法&#xff08;如自适应控制、模型预测控制等&#xff09;逐渐崭露头角&#xff0c;P…...

Next.js:构建大模型智能体GPT研究者应用的 Web开发框架

Next.js&#xff1a;构建大模型智能体GPT研究者应用的 Web开发框架 Next.js 基础知识 Next.js 是由 Vercel 公司开发维护的框架&#xff0c;极大地简化了 React 应用的开发流程。其核心特性包括&#xff1a; 服务器端渲染&#xff08;SSR&#xff09;与静态站点生成&#xff…...

航空航天混合动力(7)航空航天分布式电推进系统

航空航天分布式电推进系统 1.概述2.分布式电推进系统组成3.关键技术4.分布式电推进系统优势5.国内外研究情况5.1 国外5.2 国内6.分布式电推进系统应用场景6.1 航空领域6.2 航天领域tips:资料来自网上,仅供参考学习使用 1.概述 分布式推进系统是指飞行器推力由位于整个航空器…...

Java定时任务实现方案(一)——Timer

这篇笔记&#xff0c;简单来介绍一下Java如何使用Timer来实现定时任务&#xff0c;以及该方案的优点和缺点。 Timer是JDK自带的类&#xff0c;可以用来实现定时任务。使用 1.创建定时任务 ​ 定义一个实现了java.lang.Runnable接口的类&#xff0c;重写run()方法&#xff0c;…...

Linux(UOS系统:DNS)

赛题拓扑&#xff1a; 题目&#xff1a; 2.DNS 安装BIND9。配置为DNS根域服务器。其他未知域名解析&#xff0c;统一解析为该本机IP。创建正向区域“chinaskills.cn”。类型为Slave。主服务器为“AppSrv”。 rootispsrv:~# apt-get install bind9 -y rootispsrv:~# cd /etc/…...

一. 初始 Redis(快速入门-00)

一. 初始 Redis(快速入门-00) 文章目录 一. 初始 Redis(快速入门-00)Redis 概述&#xff1a;关系型数据库(如 MySQL ) 问题NoSQL 数据库(非关系性数据库)最后&#xff1a; Redis 概述&#xff1a; Redis 官方地址&#xff1a; https://redis.io/ Reids 中文的官方地址&#xf…...

Qt中的Item Widget组控件:QListWidget、QTreeWidget 和 QTableWidget使用方法(详细图文教程)

&#x1f4aa; 图像算法工程师&#xff0c;专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &a…...

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…...

澎峰科技计算软件栈与沐曦GPU完成适配和互认证

近期&#xff0c;澎峰科技与沐曦完成了对PerfXLM&#xff08;推理引擎&#xff09;、PerfXCloud&#xff08;大模型服务平台&#xff09;与沐曦的曦云系列通用计算GPU的联合测试&#xff0c;测试结果表明PerfXLM、PerfXCloud软件与沐曦GPU产品实现了全面兼容。 PerfXLM高性能大…...

如何用vscode断点调试Vue.js的项目

源码放在git上了&#xff0c;大家自己去看吧&#xff0c;非常简单&#xff0c;视频教程里面也有。 GitHub - SpaceView/howto_debug_vue_js_with_vscode: A basic project show how to debug vue with vscode How to Debug? Following, Creating a Project | Vue CLI to …...

C++17 新特性解析:Lambda 捕获 this

C17 引入了许多改进和新特性&#xff0c;其中之一是对 lambda 表达式的增强。在这篇文章中&#xff0c;我们将深入探讨 lambda 表达式中的一个特别有用的新特性&#xff1a;通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性&#xff0c;还极大地简化了某些场景下…...

Springboot自动配置的原理

先拿redis来举个例子 第一步导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 第二步配置 spring: redis: database:host:127.0.0.1 port…...

第13章:Python TDD完善货币加法运算(二)

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

solidity基础 -- 存储类型

在Solidity智能合约开发中&#xff0c;存储类型是一个至关重要的概念。它不仅影响合约的性能&#xff0c;还决定了数据的存储位置和生命周期。Solidity提供了三种主要的存储类型&#xff1a;storage、memory和calldata。本文将结合给定的代码示例&#xff0c;并通过更多实例详细…...

GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比

GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比 目录 GA-CNN-LSTM-Attention、CNN-LSTM-Attention、GA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于GA-CNN-LST…...

AI对齐与开源发展:多学科融合创新之路

标题&#xff1a;AI对齐与开源发展&#xff1a;多学科融合创新之路 文章信息摘要&#xff1a; 本文分析了AI对齐研究中多学科融合的重要性及开源AI领域的最新发展。文章指出&#xff0c;AI对齐问题需要计算机科学与社会选择理论等学科深度结合&#xff0c;特别是在RLHF领域的应…...

大华Java开发面试题及参考答案 (下)

口述一种排序算法,如快排。 快速排序(Quick Sort): 快速排序是一种分治算法,基本思想是将一个数组分成两个子数组,然后递归地对这两个子数组进行排序。首先,从数组中选择一个元素作为基准元素(pivot),可以选择第一个元素、最后一个元素或随机元素。然后,将小于等于基…...

[Spring] OpenFeign的使用

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

java文件按行写入数据后并创建行索引及查询

背景 当有很多数据需要存储&#xff0c;这些数据只是想要简单的按行存储和查询&#xff0c;不需要进行其他条件搜索&#xff0c;此时就可以考虑不需把这些数据存储在数据库&#xff0c;而是直接写入文件&#xff0c;然后从文件中查询 但是正常情况下&#xff0c;如果仅仅只是按…...

在视频汇聚平台EasyNVR平台中使用RTSP拉流的具体步骤

之前有用户反馈&#xff0c;在EasyNVR平台中添加Pull时使用海康设备的RTSP流地址无法播放。经过研发的优化及一系列严谨的验证流程&#xff0c;我们已确认优化后的EasyNVR平台&#xff0c;通过Pull方式添加海康设备的RTSP流已经能够正常播放。以下是具体的操作步骤&#xff1a;…...

OS2.【Linux】基本命令入门(1)

目录 1.操作系统是什么? 2.好操作系统的衡量标准 3.操作系统的核心工作 4.在计算机上所有行为都会被转换为硬件行为 5.文件 6.简单介绍一些基本命令 1.clear 2.pwd 3.ls 1.ls -l 2.隐藏文件的创建 3.ls -al 4.ls -ld 5.ls -F(注意是大写) 4.cd 1.cd .. "…...

WPF 复杂页面布局及漂亮 UI 界面设计全解析

在 WPF 开发领域&#xff0c;打造一个既具备复杂功能又拥有美观 UI 界面的应用程序是众多开发者追求的目标。复杂页面布局与漂亮的 UI 设计不仅能提升用户体验&#xff0c;还能展现应用的专业性和独特性。本文将深入探讨如何在 WPF 中实现复杂页面布局以及设计出令人眼前一亮的…...

002-SpringBoot整合AI(Alibaba)

SpringBoot整合AI 一、引入依赖二、配置application.yml三、获取 api-key四、编写 controller五、起服务调用 一、引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><vers…...

c++模板进阶

前言 一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数…...

99.8 金融难点通俗解释:净资产收益率(ROE)

目录 0. 承前1. 简述2. 比喻&#xff1a;养母鸡赚钱2.1 第一步&#xff1a;投资母鸡2.2 第二步&#xff1a;母鸡下蛋2.3 第三步&#xff1a;计算赚钱2.4 第四步&#xff1a;计算ROE 3. 生活中的例子3.1 好的ROE3.2 一般的ROE3.3 差的ROE 4. 小朋友要注意4.1 ROE高不一定好4.2 R…...

原生HTML集合

一、表格 1、固定表格 <div class"tablebox"><div class"table-container"><table id"myTable" border"0" cellspacing"0" cellpadding"0"><thead><tr></tr></thead>…...

【计算机网络】- 应用层HTTP协议

目录 初识HTTP 什么是HTTP 版本 HTTPS 模型 HTTP抓包工具 为什么使用 抓包工具的下载 下载后的重要操作 Fiddler的使用 HTTP请求与响应的基本格式 HTTP请求基本格式​编辑 HTTP响应基本格式 协议格式总结❗️❗️❗️​编辑 HTTP 详解 认识 URL URL基本格式 …...

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…...

数据库:MongoDB命令行帮助解释

MongoDB命令&#xff1a; mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程&#xff0c;负责数据存储和管理。mongos 是分片集群的路由进程&#xff0c;负责将请求路由到正确…...

python 统计相同像素值个数

目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...

工作流引擎Camunda与LiteFlow核心组件对比

以下为 Camunda 7 和 LiteFlow 详细的介绍&#xff0c;包括它们的核心组件和用途。 1. Camunda 7 详细介绍 Camunda 7 是一个基于 BPMN 2.0 标准的企业级工作流和决策自动化平台。它被广泛应用于复杂业务流程的管理和执行&#xff0c;其核心目标是通过流程自动化来提升企业效…...

记一个Timestamp时区问题的坑

resultSet.getTimestamp(“kpi_collect_time”)查出来的Timestamp居然是带时区的&#xff0c; 如果该Timestamp不是UTC时区的&#xff0c;Timestamp.toInstant().atZone(ZoneId.of(“UTC”))会把Timestamp转成UTC时区 使用Timestamp.toLocalDateTime()可以直接把时区信息抹除 …...

R语言学习笔记之开发环境配置

一、概要 整个安装过程及遇到的问题记录 操作步骤备注&#xff08;包含遇到的问题&#xff09;1下载安装R语言2下载安装RStudio3离线安装pacman提示需要安装Rtools4安装Rtoolspacman、tidyfst均离线安装完成5加载tidyfst报错 提示需要安装依赖&#xff0c;试错逐步下载并安装…...

Hive部署

1. 最小化安装Hive 本次安装的版本是Hive的3.1.3版本 解压缩Hive压缩包 # 解压缩 tar -zxvf apache-hive-3.1.3-bin.tar.gz、 # 修改文件夹名称(看个人习惯&#xff0c;可以不执行) mv apache-hive-3.1.3-bin apache-hive-3.1.3在conf目录下&#xff0c;新增hive-env.sh&…...

Windows第一次上手鸿蒙周边

端云一体所需装备 很重要&#xff1a;C/D/E/F盘要有二三十G的可用空间&#xff01; 硬件&#xff1a;华为鸿蒙实验箱&#xff08;基础版&#xff09;》飞机板核心板环境监测板 软件&#xff1a;Visual Studio Code写代码 终端编译 Hiburn烧录到开发板 MobaXterm &#xff08…...

【java数据结构】二叉搜索树

【java数据结构】二叉搜索树 一、二叉搜索树的概念二、二叉搜索树的操作2.1 插入2.2 查找2.3 删除&#xff08;重点以及难点&#xff09;2.3.1 删除节点的左边为null2.3.2 删除节点的右边为null2.3.3 删除的左右节点都不为空 三、二叉搜索树的性能分析3.1 最优情况3.2 最差情况…...

3D Vision--计算点到平面的距离

写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处&#xff1a; https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…...