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

C语言文件操作(上)

文章目录

  • 一、为什么使用文件
  • 二、什么是文件
    • 1.程序文件
    • 2.数据文件
    • 3.文件名
  • 三、文件的打开与关闭
    • 1.文件指针
    • 2.文件的打开和关闭
      • fopen 与 fclose
  • 四、文件的顺序读写
    • 01 字符输出函数:fputs
    • 02 字符输入函数:fgetc
    • 03 文本行输出函数:fputs
    • 04 文本行输入函数:fgets
    • 05 格式化输出函数:fprintf
    • 06 格式化输入函数:fscanf
    • 07 二进制输出函数:fwrite
    • 08 二进制输入函数:fread
  • 五、 文件的随机读写
    • 01 文件指针定位函数:fseek
    • 02 返回偏移量函数:ftell
    • 03 文件指针回到起始位置函数:rewind
  • 六、 文本文件和二进制文件
    • 01 文本文件
    • 02 二进制文件
    • 03 数据在文件中的存储方式
  • 七、 文本结束的判定
    • 01 被错误使用的feof
    • 02 正确使用方式
  • 八、文件缓冲区


一、为什么使用文件

 在我们的一般程序中,我们所输入的数据都是存储在内存中的,当程序退出的时候,我们存储的数据也就相应消失了;那么,我们怎么才能做到完成相应数据的长时间存储呢?
 这就涉及到了数据持久化的问题,我们一般数据持久化的方法有:把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。

二、什么是文件

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

1.程序文件

 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
比如说下图的文件就是程序文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.数据文件

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

比如下图中我们对某个文件进行读取或者输入数据,那么这个文件就是数据文件
在这里插入图片描述

3.文件名

 文件名存在的意义:作为一个文件惟一的文件标识,方便用户识别和引用。
 文件名包含:文件路径 + 文件名主干 + 文件后缀
 例如:(C:\code\test.text)
为了方便,文件标识通常被称为文件名

三、文件的打开与关闭

1.文件指针

 概念:每个被使用的文件都会在内存在开辟一个相应的文件信息区,用来存储于文件相关的信息(如:文件名、文件状态于文件当前位置);这些信息保存在一个结构体变量中,这个结构体变量由系统进行声明,称为FILE
在VS2013中是这样声明对的

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

注意:
1、不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异
2、每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节
3、我们一般会通过一个 FILE 的指针来维护这个 FILE 结构的变量。并不会直接使用,而是拿一个结构体指针指向这个结构,通过这个指针来访问和维护相关的数据,这样使用起来会更加方便
 下面让我们来创建一个指针变量

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

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。
在这里插入图片描述

2.文件的打开和关闭

 文件的使用一般是:打开文件——>使用文件——>关闭文件
而我们打开与关闭文件需要用到两个函数:>fopen>fclose
这两个函数的头文件都是<stlib.h>

fopen 与 fclose

在这里插入图片描述
在这里插入图片描述
示例:

int main() {//打开文件FILE* p = fopen("test1.txt","r");if (p == NULL) {perror("fopen");return 1;}else {printf("yes\n");}//关闭文件fclose(p);p = NULL;return 0;
}

结果:
在这里插入图片描述

注意:不关闭文件的后果:一个程序能够打开的文件是有限的,文件属于一种资源。如果只打开不释放,文件就会被占用。可能会导致一些操作被缓冲在内存中,如果不能正常关闭,缓冲在内存中的数据就不能正常写入到文件中从而导致数据的丢失。

四、文件的顺序读写

 顺序读写,顾名思义就是按照顺序在文件中读和写。
 函数一览:
在这里插入图片描述

01 字符输出函数:fputs

//字符输出
int fputc(int character,FILE* stream);

将参数 character 指定的字符写入到指定的流 stream 中,并把位置标识符向前移动 (字符必须为一个无符号字符)。适用于所有输出流。
示例:

int main() {FILE* p = fopen("test1.txt", "w");if (p == NULL) {perror("fopen");return 1;}fputc('k',p);char ch = 0;for (ch = 'a'; ch < 'z'; ch++) {if (ch % 5 == 0) {fputc('\n', p);}fputc(ch, p);}fclose(p);p = NULL;return 0;
}

结果:
在这里插入图片描述
此外,我们在使用W 打开的时候还会有覆盖效果,让我们来尝试一下
我们把刚刚那段代码中关于字符输出的部分进行注释

int main() {FILE* p = fopen("test1.txt", "w");if (p == NULL) {perror("fopen");return 1;}/*fputc('k',p);char ch = 0;for (ch = 'a'; ch < 'z'; ch++) {if (ch % 5 == 0) {fputc('\n', p);}fputc(ch, p);}*/fclose(p);p = NULL;return 0;
}

结果:
在这里插入图片描述
结果我们发现文件中的内容被覆盖了,这就是 W 的覆盖效果

02 字符输入函数:fgetc

//字符输入
int fgetc(FILE* stream);

从指定的流 stream 获取下一个字符,并把位置标识符后移(字符必须为一个无符号字符)。如果读取成功会返回相应的ASCII码值,如果读取失败会返回一个EOF。适用于所有输入流。

示例:

 //使用fgetc读取文件
int main(void) {FILE* pf = fopen("test1.txt", "r");if (pf == NULL) {perror("fopen");return 1;}//读文件int ret = fgetc(pf);printf("%c\n", ret);ret = fgetc(pf);printf("%c\n", ret);ret = fgetc(pf);printf("%c\n", ret);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述
注意:在读取时要把文件打开方式变为“r”

03 文本行输出函数:fputs

//文本行输出
int fputs(const char* str, FILE* stream);

将字符串写入到指定的流 stream 中(不包括空字符)。适用于所有输出流。

示例:

int main() {FILE* pf = fopen("text2.txt","w");if (pf == NULL) {perror("fopen");return 1;}fputs("abcd",pf);char arr[] = "abcdefgh";fputs(arr,pf);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

04 文本行输入函数:fgets

//文本输入函数
int fgets(char* str, int num, FILE* stream);

从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串中,当读取(n-1)个字符时,或者读取到换行符、到达文件末尾时,它会停止,具体视情况而定。适用于所有输入流。

示例:

int main() {FILE* pf = fopen("text2.txt","r");if (pf == NULL) {perror("fopen");return 1;}char arr[10];fgets(arr,4,pf);printf("%s\n",arr);fgets(arr, 4, pf);printf("%s\n", arr);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述
**注意:**假如 n 是100,读取到的就是99个字符(n-1),因为要留一个字符给斜杠0。

05 格式化输出函数:fprintf

用于对格式化的数据进行写文件,发送格式化输出到流 stream 中。适用于所有输出流。
示例:

struct test {char name[10];int age;char sex[4];
};
int main() {FILE* pf = fopen("text3.txt", "w");if (pf == NULL) {perror("fopen");return 1;}struct test ts = { "张三",18,"男"};fprintf(pf, "%s %d %s", ts.name, ts.age, ts.sex);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

06 格式化输入函数:fscanf

//格式化输入函数
int fscanf(FILE* stream, const char* format, ...);

用于对格式化的数据进行读取,从流 stream 读取格式化输入。适用于所有输入流

示例:

struct test {char name[10];int age;char sex[4];
};
int main() {FILE* pf = fopen("text3.txt", "r");if (pf == NULL) {perror("fopen");return 1;}struct test ts = { 0 };fscanf(pf,"%s %d %s",ts.name,&(ts.age),ts.sex);printf("%s %d %s", ts.name, ts.age, ts.sex);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

07 二进制输出函数:fwrite

//二进制输出函数
size_t fwrite(const void* ptr,size_t size,size_t count,FILE* stream);

将ptr指向的数据写入流stream中

示例:

struct test {char name[10];int age;char sex[4];
};
int main() {FILE* pf = fopen("text4.txt", "w");if (pf == NULL) {perror("fopen");return 1;}struct test ts = { "abcdef",22,"cdd"};fwrite(&ts,sizeof(struct test),1,pf);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述
结果显示我们输入的文字数据相显示的是乱码,让我们用二进制形式打开文件来检查一下
在这里插入图片描述
打开后结果:
在这里插入图片描述

原因:
我们刚才用的都是文本编译器,文本编译器打开二进制形式的文件完全是两种状态;对于字符串,以文本形式写进去和以二进制形式写进去是一样的;但是对于整数、浮点数等来说就不一样了,文本形式写入和二进制形式写入完全是两个概念。

08 二进制输入函数:fread

//二进制输入函数
size_t fread(void* ptr, size_t size, size_t count, FILE* stream);

将二进制数据从stream指向的文件流中读取到ptr指向的对象中

示例:

struct test {char name[10];int age;char sex[4];
};
int main() {FILE* pf = fopen("text4.txt", "r");if (pf == NULL) {perror("fopen");return 1;}struct test ts = { 0 };fread(&ts, sizeof(struct test), 1, pf);printf("%s %d %s\n",ts.name,ts.age,ts.sex);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

五、 文件的随机读写

01 文件指针定位函数:fseek

//文件指针定位函数
int fseek(FILE* stream,long int offset,int origin);

根据文件指针的位置和偏移量来定位文件指针
a.参数:offset,是偏移量
b.origin是其实位置,一共有三个
 SEEK_CUR :当前文件指针位置
 SEEK_END :文件末尾位置
 SEEK_SET:文件起始位置

示例:

int main() {FILE* pf = fopen("text3.txt","r");if (pf == NULL) {perror("fopen"); return 1;}int ch = fgetc(pf);printf("%c\n",ch);ch = fgetc(pf);printf("%c\n", ch);//从当前文件指针位置向前移动两个单位fseek(pf,-2,SEEK_CUR);ch = fgetc(pf);printf("%c\n", ch);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

02 返回偏移量函数:ftell

//返回偏移量函数
long int ftell(FILE* stream);

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

示例:

//返回文件指针相对于起始位置的偏移量
int main() {FILE* pf = fopen("text4.txt", "r");if (pf == NULL) {perror("fopen");return 1;}//调整文件指针位置fseek(pf,5,SEEK_SET);//使文件指针从起始位置右移5个单位int ch = fgetc(pf);printf("%c\n",ch);//返回文件指针所处位置的偏移量int ret = ftell(pf);printf("%d\n",ret);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

03 文件指针回到起始位置函数:rewind

//使文件指针回到起始位置
void rewind(FILE* stream);

示例:

//返回文件指针相对于起始位置的偏移量
int main() {FILE* pf = fopen("text4.txt", "r");if (pf == NULL) {perror("fopen");return 1;}//调整文件指针位置fseek(pf,5,SEEK_SET);//使文件指针从起始位置右移5个单位int ch = fgetc(pf);printf("%c\n",ch);//返回文件指针所处位置的偏移量int ret = ftell(pf);printf("%d\n",ret);int arr[10];rewind(pf);fgets(arr,7,pf);printf("%s\n",arr);fclose(pf);pf = NULL;return 0;
}

结果:
在这里插入图片描述

六、 文本文件和二进制文件

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

01 文本文件

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

02 二进制文件

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

03 数据在文件中的存储方式

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

具体使用:
举个简单的例子:比如整数10000,如果以 ASCII 码的形式形式输出到磁盘,则磁盘中占用5个字节(每个字符占1个字节)。而如果以二进制的形式输出,则在磁盘上只占4个字节。

int main() {FILE* pf = fopen("text5.txt", "wb");if (pf == NULL) {perror("fopen");return 1;}int a = 10000;fwrite(&a,sizeof(int),1,pf);fclose(pf);pf = NULL;return 0;
}

以二进制形式打开文件:在这里插入图片描述
我们检验一下,这个数字是否是10000
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

七、 文本结束的判定

01 被错误使用的feof

 feof 函数介绍:在文件结束时,判断文件因为何种原因导致文件结束的函数,判断是因为读取失败而结束,还是因为遇到文件尾而结束。如果文件结束,则返回非0值,否则返回0。

 错误用途:feof 函数是个经常被错误使用的一个函数。在文件读取过程中,不能用 feof 函数的返回值直接判断文件是否结束!feof 函数绝对不是用来判断文件是否结束的函数!feof 不是用来判定文件是否结束了的,还是在文件已经结束时,判断是什么原因导致文件结束的。

 正确用途:当文件读取结束时,判断是因为读取失败而结束,还是因为遇到文件尾而结束。

int main() {FILE* pf = fopen("text4.txt", "r");if (pf == NULL) {perror("fopen");return 1;}int ch = 0;while ((ch = fgetc(pf)) != EOF) {putchar(ch);}printf("\n");if (ferror(pf)) {puts("文件读取失败");}else if (feof(pf)) {puts("遇到文件末尾停止");}fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

02 正确使用方式

文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )
例如:
fgetc 判断是否为 EOF .
fgets 判断返回值是否为 NULL .
2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
例如:
fread判断返回值是否小于实际要读的个数。

八、文件缓冲区

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

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

这里可以得出一个结论:
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。
如果不做,可能导致读写文件的问题。

相关文章:

C语言文件操作(上)

文章目录 一、为什么使用文件二、什么是文件1.程序文件2.数据文件3.文件名 三、文件的打开与关闭1.文件指针2.文件的打开和关闭fopen 与 fclose 四、文件的顺序读写01 字符输出函数&#xff1a;fputs02 字符输入函数&#xff1a;fgetc03 文本行输出函数&#xff1a;fputs04 文本…...

二叉树的前 中 后序的非递归实现(图文详解)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…...

.NET验收

验收通用模板&#xff1a; 1.该资料计划看几天&#xff1f; 实际看了几天&#xff1f; 计划7天&#xff0c;实际看了9天 2.多少天一篇总结&#xff1f;将总结列出来。 一周总结一篇。 博客地址:3.这个资料相较于之前资料共同的内容是什么&#xff1f; 不同的(需要强化学习)…...

C++11——lambda表达式

文章目录 1. C98对自定义类型的排序2. lambda表达式语法2.1 捕捉列表 3. lambda底层原理 1. C98对自定义类型的排序 在C98中&#xff0c;想要对自定义类型就行排序&#xff0c;我们得自己写仿函数来表明我们相对哪一项进行排序 struct Student {Student(string name, long id…...

美国加密货币交易和借贷平台Membrane Labs完成2000万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国纽约的加密货币交易和借贷平台Membrane Labs今日宣布已完成2000万美元A轮融资。 参与本轮融资的投资机构包括&#xff1a;Brevan Howard Digital、Point72 Ventures、Jane Street Cap…...

8-k8s-污点与容忍

文章目录 一、概念二、相关操作三、实操污点NoSchedule四、实操污点NoExecute五、实操容忍 一、概念 污点与容忍 污点taints定义在节点之上的键值型属性数据。当节点被标记为有污点&#xff0c;那么意味着不允许pod调度到该节点。 容忍tolerations是定义在 Pod对象上的键值型属…...

钢铁异常分类140篇Trans 学习笔记 小陈读paper

钢铁异常分类 对比学习 比较好用 1.首先&#xff0c;为每个实例生成一对样本&#xff0c; 来自同一实例的样本被认为是正例&#xff0c; 来自不同实例的样本被认为是负例。 2.其次&#xff0c;这些样本被馈送到编码器以获得嵌入。 3.在对比损失[16]的影响下&#xff0c; …...

YOLOv5-理论部分

YOLOv5 作者: Ultralytics 论文源码: https://github.com/ultralytics/yolov5 Ultralytics&#xff1a;“超视觉技术” / “超视觉系统” 0. 引言 “YOLOv5 &#x1f680; 是世界上备受喜爱的视觉人工智能&#xff0c;代表了 Ultralytics 对未来视觉人工智能方法的开源研究&a…...

蓝桥等考C++组别一级004

第一部分&#xff1a;选择题 1、C L1&#xff08;15分&#xff09; 下列是编程语言的一项是&#xff08; &#xff09;。 A. C B. Word C. Excel D. PowerPoint 正确答案&#xff1a; A 2、C L1&#xff08;15分&#xff09; 仔细阅读以下程序代码&#xff0c;其中有…...

分布式服务的链路跟踪 Sleuth Micrometer zipkin OpenTelemetry

由来 在分布式应用开发过程中&#xff0c;一个请求会调用多个应用&#xff0c;会有那种需要知道各个应用之间耗时的想法&#xff0c;这样可以知道一个调用的总时长以及各个组件之间的处理耗时&#xff0c;后面方便定位问题。 理论依据 起源于 google dapper 论文 https://re…...

CUDA学习笔记4——自定义设备函数

自定义设备函数 核函数&#xff1a;__global__修饰&#xff1b;在设备中执行&#xff1b;设备函数&#xff1a;__device__修饰&#xff1b;在设备中执行&#xff1b;只能被核函数或其他设备函数调用&#xff1b;主机函数&#xff1a;__host__修饰&#xff08;可省略&#xff0…...

微前端四:qiankun在开发中遇到的问题

在qiankun开发中会遇到很多问题&#xff0c;上一篇微前端三&#xff1a;qiankun 协作开发和上线部署其实也是在解决一些经常遇到的问题&#xff0c;下面的两点也算是比较经典的了 1、子应用图片路径问题 2、基座是Vue2.0 element ui 配合 子应用 Vue3.0 element plus 导致的样…...

Android DisplayPolicy增加一些动作,打开后台接口

Android DisplayPolicy增加一些动作&#xff0c;打开后台接口 前言一、了解android全局滑动事件的拦截二、修改1.DisplayPolicy.java修改 前言 一些后台接口 界面之类的不方便打开&#xff0c;但是测试需要用到&#xff0c;这里就添加一个10秒内上拉6下&#xff0c;打开一个后…...

基于Linux安装Hive

Hive安装包下载地址 Index of /dist/hive 上传解压 [rootmaster opt]# cd /usr/local/ [rootmaster local]# tar -zxvf /opt/apache-hive-3.1.2-bin.tar.gz重命名及更改权限 mv apache-hive-3.1.2-bin hivechown -R hadoop:hadoop hive配置环境变量 #编辑配置 vi /etc/pro…...

FPGA 图像缩放 1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…...

重复控制逆变器的仿真分析研究

摘 要 本次设计主要以重复控制逆变器控制系统设计应用作为研究背景&#xff0c;运用MATLAB/Simulink仿真工具搭建相应的仿真模型。重复控制逆变器控制系统拥有很好的动态特性&#xff0c;运行稳定性高、调速的范围较大&#xff0c;性能可靠等&#xff0c;在实际生产制造中被广…...

WuThreat身份安全云-TVD每日漏洞情报-2023-10-18

漏洞名称:致远 OA XML 外部实体注入漏洞 漏洞级别:高危 漏洞编号:NULL 相关涉及:V5/G6 V6.0及以上全系列版本 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-26027 漏洞名称:XNSOFT NCONVERT 图像文件缓冲区溢出 漏洞级别:中危 漏洞编号:CVE-…...

开启机器人学新时代,《机器人学建模、规划与控制》完美诠释未来

机器人学是未来发展的热点领域之一&#xff0c;而在这个领域中&#xff0c;建模、规划与控制则是必不可少的基础技术。今天作者要向大家推荐一本机器人学领域的经典教材——《机器人学建模、规划与控制》。 这本书由西安交通大学出版社出版&#xff0c;作者是机器人学专业的鼎…...

C#根据ip获取地理位置信息的方法,史上最全

商业收费 百度地图高德地图腾讯地图纯真IP 开源免费 纯真ip免费版 以前可以直接下载&#xff0c;现在获取ip数据库的方式改变了&#xff0c;自行官网查看把&#xff0c;个人或者学术研究&#xff0c;商用追责&#xff0c;商业用途慎用 using System.Collections.Generic; us…...

Git问题汇总

1.取消全局代理 一般报错Failed to connect to github.com port 443 after 21089 ms: Couldn’t connect to server 取消全局代理&#xff1a; git config --global --unset http.proxygit config --global --unset https.proxy#或者 git config --global http.proxy http://…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...