C语言 — 文件

article/2025/8/7 15:36:12

目录

  • 1.流
    • 1.1 流的概念
    • 1.2 常见的的流
  • 2.文件的打开和关闭
    • 2.1 fopen函数
    • 2.2 fclose函数
    • 2.3 文件的打开和关闭
  • 3.文件的输入输出函数
    • 3.1 fputc函数
    • 3.2 fgetc函数
    • 3.3 feof函数和ferror函数
    • 3.4 fputs函数
    • 3.5 fgets函数
    • 3.6 fwrite函数
    • 3.7 fread函数
    • 3.8 fprintf函数
    • 3.9 fscanf函数
  • 4 sprintf和sprintf函数
  • 5. fseek函数
  • 6. ftell函数和rewind函数
  • 7.fflush函数

1.流

1.1 流的概念

外部设备需要从内存中写入数据进行输出,而内存需要从外部设备读取数据进行输入,为了方便外部设备与内存数据的输入输出,需要借助流帮助数据的写入与读取。

常见的外部设备有:屏幕,文件,硬盘,画面等。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3b4cd6f1d53244239a0be67b774c9561.png

1.2 常见的的流

stdin:标准输入流,从外部设备上读取数据,scanf函数就是从标准输入流(键盘)获取数据的;

stdout:标准输出流,从内存获取数据,将数据输出或写入在外部设备上,printf函数就是标准的输出流函数;

stderr:标准错误流,将错误信息输出到屏幕上;

对于文件而言,以上三种流的类型是FILE*,即文件流。

2.文件的打开和关闭

2.1 fopen函数

在这里插入图片描述
fopen函数的功能是将一个文件打开,并返回该文件的起始地址,类型是FILE*,第一个参数是文件路劲,第二个参数是以什么方式打开文件;

常见的文件打开方式如下

在这里插入图片描述

2.2 fclose函数

在这里插入图片描述
fclose函数的作用是打开的文件进行关闭操作,参数是需要关闭参数的起始地址,如果文件成功关闭返回0,如果关闭失败,返回EOF(-1)。

使用fclose函数成功关闭文件时,需要即时将指针置空指针,防止野指针的使用,导致程序奔溃。

2.3 文件的打开和关闭

#include<stdio.h>//文件
int main()
{//打开text.txt的文件,以写入的方式FILE* pf = fopen("test.txt", "w");//判断方式打开成功if (pf == NULL){//输出错误从原因perror("fopen");//终止程序return 1;}//使用//......//......//关闭文件,置空指针fclose(pf);pf = NULL;return 0;
}

当程序运行成功后,没有创建文件会默认创建以test.txt为路劲的文件。
在这里插入图片描述

3.文件的输入输出函数

3.1 fputc函数

在这里插入图片描述
fputc函数的功能是将指定字符通过文件输出流写入到指定的文件中,第一个参数是字符的ASCII码值,第二个参数文件的起始位置的指针。

在这里插入图片描述
如果返回成功写入,返回这个写入字符的ASCII码值,如果失败,就返回EOF(-1),并在输出流上设置错误信息,可以使用ferror函数输出错误信息。

fputc的使用

#include<stdio.h>//文件
int main()
{//打开text.txt的文件,以写入的方式FILE* pf = fopen("test.txt", "w");//判断方式打开成功if (pf == NULL){//输出错误从原因perror("fopen");//终止程序return 1;}//fputc使用//将a - z的字符输出写入到test.txt文件中int i = 0;for (i = 'a'; i <= 'z'; i++){putc(i, pf);}//关闭文件,置空指针fclose(pf);pf = NULL;return 0;
}

打开此时的test.txt文件:可以观察到a - z字符的内容已经输出写入到此文件中。

在这里插入图片描述

3.2 fgetc函数

在这里插入图片描述

fgetc函数的功能是从文件输入流中读取数据到内存中,参数为读取文件的起始地址。

在这里插入图片描述
如果读取成功,返回读取字符的ASCII码值,如果没有读取到有效内容,返回EOF(-1);分为两种情况:第一种是遇到文件末尾,在文件末尾设置指示器,可以通过feof函数检测;第二种情况是读取中途读取失败,会在读取失败的位置设置指示器,可以通过ferror函数检测。

fgetc函数的使用:读取上面的test.txt文件

#include<stdio.h>//文件
int main()
{//打开text.txt的文件,以读取的方式FILE* pf = fopen("test.txt", "r");//判断方式打开成功if (pf == NULL){//输出错误从原因perror("fopen");//终止程序return 1;}//fgetc使用//将test.txt文件中的a - z 字符读取int i = 0;for (i = 'a'; i <= 'z'; i++){printf("%c ",getc(pf));}//关闭文件,置空指针fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

3.3 feof函数和ferror函数

在这里插入图片描述
ferror函数是检测是否文件在读取或者写入的过程有失败的情况,可以通过指示器检测,如果检测到指示器,就返回非0值,如果没有检测到返回0值;

在这里插入图片描述

feof函数的功能是检测文件是否读取到末尾;通过指示器可以检测,如果检测到指示器,返回非0值,没有检测到指示器返回0;

feof和feeor的使用

int main()
{//打开text.txt的文件,以读取的方式FILE* pf = fopen("test.txt", "r");//判断方式打开成功if (pf == NULL){//输出错误从原因perror("fopen");//终止程序return 1;}//以读的形式打开需要输入函数读取//使用输出函数会导致读取失败//使用ferror函数和feof函数观察int r = fputc('a', pf);if (r == EOF)//读取失败的返回值{//1.判断是否读取到文件末尾if (feof(pf) != 0){printf("读取到文件末尾,返回EOF\n");}//2.判断是否在文件中途读取失败else if (ferror(pf) != 0){printf("文件在中途读取失败,返回EOF\n");}}//关闭文件,置空指针fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

如果将test.txt的内容删除后保存(a -z 的数据删除后CTRL + S 保存),使用以上程序的输出结果如下

在这里插入图片描述

3.4 fputs函数

在这里插入图片描述
fupus函数的功能是将内存的数据通过文件输出流中写入到文件中;第一个参数是一个不可被修改的字符串的起始地址,第二个参数是文件流的起始地址,返回类型是int。
在这里插入图片描述
如果写入成功返回非0值,如果写入失败,设置指示器,可以同ferror函数检测,并返回EOF(-1)。

fputs函数的使用:1.将字符串写入文件;2.将字符串输出到屏幕(控制台);

#include<stdio.h>
#include<stdlib.h>int main()
{FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}//写入//1.写入到文件fputs("Hello", pf);//2.输出到屏幕,stdout是标准输出流fputs("World", stdout);//关闭fclose(pf);pf = NULL;return 0;
}

写入到test.txt文件中的数据

在这里插入图片描述

输出到控制台的数据

在这里插入图片描述

3.5 fgets函数

在这里插入图片描述
fgets函数是从文件中读取数据通过文件输入流键将数据存储到内存中;第一个参数是读取字符串的起始地址,第二个参数是读取的字符个数,第三个参数是文件流的起始地址,返回类型是char*。

在这里插入图片描述
如果读取成功,返回读取的字符串起始地址;在读取字符时遇到文件末尾会设置文件指示器,可以通过feof函数检测,在可读取的字符数据全部读取完成前遇到这个指示器,会返回空指针(NULL);如果读取的字符发生错误,会设置错误指示器,可以通过ferror函数检测,并返回空指针(NULL)。

fgets函数的使用:1.从文件读取;2.从外部设备读取(键盘)

#include<stdio.h>
#include<stdlib.h>int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}char ch[12] = "************"//写入//1.读取文件信息到数组中fgets(ch,6,pf);//2.从键盘读取数据,存储到数组中//stdin是标准输入流fgets(ch + 5,7, stdin);puts(ch);//输出//关闭fclose(pf);pf = NULL;return 0;
}

按F10启动调试,打开调试监视窗口,输出ch观察数组的内容:执行ch的初始化语句

在这里插入图片描述

此时的text.txt文件存放的是Hello,只有5个字符,需要读取6个字符的数组,fgets函数会在末尾存放一个\0。
在这里插入图片描述
第二条fgets函数是从键盘读取数据,输入“ World",用空格替换’\0’的位置,后续补上World,末尾再添加一个\0。

在这里插入图片描述

最后通过puts函数输出数组ch的内容,将pf指向的文件关闭并置为空指针。

在这里插入图片描述

3.6 fwrite函数

在这里插入图片描述
fwrite函数是从内存获取的数据通过文件输出流以二进制是形式写入到文件中;第一个参数是写入数据的起始地址,第二个参数是元素的大小,第三个参数是个数,第四个参数是文件起始地址,返回类型是size_t.

在这里插入图片描述
返回值是成功写入的元素个数;如果最终读取的个数与参数的个数不一样有以下两种情况:如果返回值是0,发生写入失败,会设置错误指示器,可以通过ferror函数检测;第二种情况返回非0值,会设置文件写入结束的指示器,可以通过feof函数检测。

fwrite函数的使用

//fwrite
#include<stdio.h>
#include<stdlib.h>int main()
{//二进制写入的形式打开文件FILE* pf = fopen("test.txt", "wb");if (pf == NULL){perror("fopen");return 1;}int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//使用:将arr数组的十个元素写入到文件中 fwrite(arr, sizeof(arr[0]), sizeof(arr) / sizeof(arr[0]), pf);//关闭fclose(pf);pf = NULL;return 0;
}

程序成功运行后,使用fwrite函数会将上一次写入的数据进行删除,后进行覆盖,以二进制的形式写入

在这里插入图片描述

在这里插入图片描述

3.7 fread函数

在这里插入图片描述
fread函数的功能是从文件中读取数据通过文件输入流以二进制形式输入到内存中;第一个参数数据存放位置的起始地址,第二个参数是元素的大小,第三个参数是读取的个数,第四个参数是读取数据的文件起始地址,返回类型是size_t。

在这里插入图片描述
如果读取成功,返回值是成功读取的个数;如果读取的个数与参数不一样有以下两种情况:如果返回值是0,发生写入失败,会设置错误指示器,可以通过ferror函数检测;第二种情况返回非0值,会设置文件写入结束的指示器,可以通过feof函数检测。

fread函数的使用:以上述的text,txt文件为例。

#include<stdio.h>
#include<stdlib.h>int main()
{//二进制读取的形式打开文件FILE* pf = fopen("test.txt", "rb");if (pf == NULL){perror("fopen");return 1;}int arr[10] = {0};//使用:将pf的数据读取后存放于arr数组中. fread(arr, sizeof(arr[0]), sizeof(arr) / sizeof(arr[0]), pf);//输出arrfor (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}//关闭fclose(pf);pf = NULL;return 0;
}

将鼠标移向源文件窗口,点击右键打开添加中的现有项,点击text.txt文件,添加到源文件中。
在这里插入图片描述
在这里插入图片描述

点击test.txt文件,点击鼠标右键选择打开方式,选择以二进制方式打开。

在这里插入图片描述

在这里插入图片描述
可以观察到执行以上程序后arr数组读取数据的内容:1 - 10(十六进制的形式,小端存储)

在这里插入图片描述
在这里插入图片描述

3.8 fprintf函数

在这里插入图片描述
fprinf函数是将内存的数据通过文件输出流以指定格式的数据写入到文件中;第一个参数是文件流,第二个参数是数据的格式,第三个参数是对于的变量,返回类型是int。

在这里插入图片描述
如果写入成功返回写入的个数;如果写入过程出现错误,设置错误信息的指示器,并返回一个负数;如果在写入宽字符时出现多个错误,会将错误码(errno)实在为EILSEQ,并返回一个负数。

fprintf函数的使用

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)struct Stu
{char name[20];int age;char id[8];
}s = { "James",21,"22334455" };int main()
{//以写入的形式打开文件FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}//使用:将结构体按照指定格式写入文件中fprintf(pf, "%s %d %s", s.name, s.age, s.id);struct Stu s1;//关闭fclose(pf);pf = NULL;return 0;
}

程序运行后的text.txt的信息

在这里插入图片描述

3.9 fscanf函数

在这里插入图片描述

fscanf函数的功能是从文件中读取的数据通过文件输入流将数据输入到内存中;第一个参数是读取数据的文件起始地址,第二个参数是按照指定格式读取数据,第三个参数是将数据存储位置的地址,返回类型是int.

在这里插入图片描述
如果成功读取,返回成功读取的个数;如果在全部数据读取完成前发生读取错误或读取到文件末尾,返回EOF(-1),分别通过ferror函数和feof函数检测。

fscanf函数的使用:以上述的text.txt文件的数据读取.

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)struct Stu
{char name[20];int age;char id[8];
}s1 ;
int main()
{//以读取的形式打开文件FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//使用:将文件的数据按照指定格式存放于变量s1fscanf(pf, "%s%d%s", &s1.name, &s1.age, &s1.id);//按照格式输出printf("name: %s\nage: %d\nid: %s", s1.name, s1.age, s1.id);//关闭fclose(pf);pf = NULL;return 0;
}

输出从文件中按照指定格式的数据

在这里插入图片描述

4 sprintf和sprintf函数

在这里插入图片描述
sprintf函数的功能是将格式化的数据写入到字符串中;第一个参数是字符串的起始地址,第二个参数是指定格式,第三个参数是指定成员。

在这里插入图片描述
如果输出成功,返回成功输出的个数,如果输出失败返回一个负数。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/12516a38ccec46c382bdbf3d8a0683c4.png

sscanf函数的功能是从字符串中按照格式化的方式读取数据;第一个参数是字符串的起始地址,第二个参数是指定格式,第三个参数是变量的地址。

在这里插入图片描述
如果转换成功返回的是格式列表的项数(与scanf函数的返回值一样,例如:”%s %d“的格式读取成功返回2 ),如果读取失败返回-1.

sscanf和sprintf的使用

#include <stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
struct Stu
{char name[30];int age;float score;
};
int main()
{struct Stu s = { "zhangsan", 100, 85.5f };//将s中的结构数据转换成⼀个字符串char arr[100] = { 0 };sprintf(arr, "%s %d %.1f", s.name, s.age, s.score);printf("%s\n", arr);//将字符串按照格式输出struct Stu s1;sscanf(arr, "%s %d %f", s1.name, &s1.age, &s1.score);printf("%s %d %.1f", s1.name, s1.age, s1.score);return 0;
}

输出内容

在这里插入图片描述

scanf,printf,fscanf,fprintf,sscanf,sprintf的作用如下

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a52b97456e1e4bf9a631dd38e19bdb7d.png

5. fseek函数

在这里插入图片描述
fseek可以设置光标位置,使文件从此光标位置开始读取;第一个参数是文件起始位置的地址,第二个参数是偏移量的大小,第三个参数是光标的起始位置,返回类型为int.

在这里插入图片描述
第三个参数的取值可以是以上三种,SEEK_SET(起始位置),SEEK_CUR(当前光标的位置),SEEK_END(文件末尾)。

在这里插入图片描述
如果成功设置光标位置,返回0,如果设置失败,返回非0值并设置错误指示器(ferror)。

fseek的使用:将text.txt的内容先输入abcdef后保存。

在这里插入图片描述

#include<stdio.h>
int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//fseek函数使用//开始光标位置在0偏移处,将光标设置在1偏移量位置fseek(pf, 1, SEEK_SET);//指向字符a后面的位置int c = fgetc(pf);//读取到b字符,光标移向b后面的位置printf("%c", c);//输出字符b//将光标设置在当前位置的后1偏移量位置fseek(pf, 1, SEEK_CUR);//指向b后面的位置c = fgetc(pf);//读取到字符c,光标指向c后面位置printf("%c", c);//输出c//将光标设置在文件末尾的前1偏移量位置fseek(pf, -1,SEEK_END);c = fgetc(pf);//读取到字符f,光标指向字符f后面printf("%c", c);//输出f//关闭fclose(pf);pf = NULL;return 0;
}

在这里插入图片描述

6. ftell函数和rewind函数

在这里插入图片描述
ftell函数是将当前光标的位置与起始位置的偏移量值返回,如果未能读取返回-1L(double);

在这里插入图片描述
rewind函数是将光标设置为起始位置,参数是文件指针,没有返回值。

/* ftell and rewind example : getting size of a file */
#include <stdio.h>int main()
{FILE* pf = fopen("test.txt", "r");//文件内容:abcdefif (pf == NULL) perror("Error opening file");else{fseek(pf, 0, SEEK_END);   // non-portablelong size = ftell(pf);printf("Size of test.txt.txt: %ld bytes.\n", size);//重新设置光标位置rewind(pf);printf("%c", fgetc(pf));//关闭文件,设置空指针fclose(pf);pf = NULL;}return 0;
}

在这里插入图片描述

7.fflush函数

在这里插入图片描述
fflush是将文件缓冲区的数据进行刷新,对于文件输入流的数据,终止读取,对于文件输出流的数据进行写入,函数的参数是文件指针,返回类型是int。

在这里插入图片描述
成功刷新缓冲区返回0值,刷新失败返回-1,并设置错误指示器。

fflush的使用

/* fflush example */
#pragma warning(disable:4996)
#include <stdio.h>
#include<windows.h>
char mybuffer[80];
int main()
{char mybuffer[10];FILE* pf = fopen("test.txt", "r+");if (pf == NULL){perror("fopen");//输出错误信息return 1;//终止程序}fputs("abcdef", pf);printf("数据正在存储在缓冲区中....\n");Sleep(5000);//休眠5秒fflush(pf);    // flushing or repositioning requiredprintf("缓冲区已经刷新,数据写入中...\n");rewind(pf);//将光标设置在起始文件指针的位置fgets(mybuffer, 10, pf);//获取信息puts(mybuffer);//输出//关闭文件,置空指针fclose(pf);pf = NULL;return 0;
}

程序运行中还未刷新缓冲区数据,文件的内容是空的。

在这里插入图片描述

刷新后,abcdef写入文件中。

在这里插入图片描述

在这里插入图片描述


http://www.hkcw.cn/article/fKGPRECDBG.shtml

相关文章

13. springCloud AlibabaSeata处理分布式事务

目录 一、分布式事务面试题 1.多个数据库之间如何处理分布式事务&#xff1f; 2.若拿出如下场景&#xff0c;阁下将如何应对? 3.阿里巴巴的Seata-AT模式如何做到对业务的无侵入? 4.对于分布式事务问题&#xff0c;你知道的解决方案有哪些?请你谈谈? 二、分布式事务问题…

java多线程与JUC

进程线程 进程&#xff1a;进程是操作系统分配资源的基本单位。在电脑中&#xff0c;一个软件就是一个进程 线程&#xff1a;线程是CPU调度的基本单位&#xff0c;是进程内的执行单元。相当于一个软件中的不同功能 多线程程序的特点&#xff1a;程序可以同时去做多件事&#…

GCC 下载安装

下载 官网&#xff1a;GCC, the GNU Compiler Collection- GNU Project Cygwin linux 环境 MinGW 在 Windows 上提供 GNU 开发工具比 Cygwin 更轻量&#xff08;不模拟完整的 POSIX 环境&#xff09;选择&#xff1a;binaries选择mingw-w64

GpuGeek如何成为AI基础设施市场的中坚力量

AI时代&#xff0c;算力基础设施已成为支撑技术创新和产业升级的关键要素。作为国内专注服务算法工程师群体的智算平台&#xff0c;GpuGeek通过持续创新的服务模式、精准的市场定位和系统化的生态建设&#xff0c;正快速成长为AI基础设施领域的中坚力量。本文将深入分析GpuGeek…

DAY 35 超大力王爱学Python

知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#xff0c;对比下效果。…

MYOJ_4149:(洛谷P1002)[NOIP 2002 普及组] 过河卒(坐标型DP)

题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示&#xff0…

Java高效处理大文件:避免OOM的深度实践

​关键痛点​&#xff1a;当加载10GB的CSV文件时&#xff0c;Files.readAllLines()抛出OutOfMemoryError&#xff0c;该如何解决&#xff1f; 在Java中处理大文件是开发中的高频场景&#xff0c;尤其在大数据、日志分析等领域。本文将深入探讨几种高效处理大文件的方案&#x…

Word双栏英文论文排版攻略

word写双栏英文论文的注意事项 排版首先改字体添加连字符还没完呢有时候设置了两端对齐会出现这样的情况&#xff1a; 公式文献 等我下学期有时间了&#xff0c;一定要学习Latex啊&#xff0c;word写英文论文&#xff0c;不论是排版还是公式都很麻烦的&#xff0c;而Latex一键就…

esp-idf ubuntu环境配置

常用命令 source ~/esp/esp-idf/export.shidf.py --list-targets idf.py set-target 将清除 build 目录&#xff0c;并重新生成 sdkconfig 文件&#xff0c;原来的 sdkconfig 文件保存为 sdkconfig.old。 idf.py build idf.py flashNo module named pip wget https://bootst…

BFS入门刷题

目录 P1746 离开中山路 P1443 马的遍历 P1747 好奇怪的游戏 P2385 [USACO07FEB] Bronze Lilypad Pond B P1746 离开中山路 #include <iostream> #include <queue> #include <cstring> using namespace std; int n; int startx, starty; int endx, endy; …

Cypress + TypeScript + Vue3

🚀 从零构建 Cypress + TypeScript + Vue3 组件测试环境【详细实战教程】 组件测试是前端开发中不可忽视的一环,它能够帮助我们在开发阶段就发现 UI 与交互逻辑问题。本文将带你手把手搭建基于 Cypress + TypeScript + Vue3 的组件测试环境,包含完整目录结构、配置文件、组…

车辆检测算法在爆炸事故应急响应中的优化路径

视觉分析赋能车辆管控&#xff1a;以山东应急场景为例 背景&#xff1a;应急场景下的车辆管控痛点 近期山东多起爆炸事故暴露了应急响应中的车辆管理短板&#xff1a;消防车、救护车因违停车辆堵塞通道&#xff0c;违规车辆闯入事故核心区&#xff0c;传统监控系统依赖人工识别…

【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、WebGL、vue、react,提供全部源代码)第2期

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

π0论文阅读

https://www.physicalintelligence.company/download/pi0.pdf 模型输出的token&#xff0c;接diffusion模型&#xff0c;相比自OpenVLA那样的回归模型解码出action&#xff0c;输出更快&#xff0c;精度也会更高。 一、动作专家模块与流匹配&#xff08;Flow Matching&#xf…

安全漏洞修复导致SpringBoot2.7与Springfox不兼容

项目基于 springboot2.5.2 实现的&#xff0c;用 springfox-swagger2 生成与前端对接的 API 文档&#xff1b;pom.xml 中依赖如下 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&l…

VisionPro —— 不规则胶路检测

简介 本文介绍了一种基于Cognex视觉工具的胶路检测方法&#xff0c;分为直线和弧形两部分检测。 直线部分采用卡尺工具检测胶路宽度&#xff0c;通过动态调整仿射矩形区域进行多位置测量&#xff1b;弧形部分使用blob工具沿圆周设置检测区域。 两种方法均通过脚本实现工具映…

QT中更新或添加组件时出现“”qt操作至少需要一个处于启用状态的有效资料档案库“解决方法”

在MaintenanceTool.exe中点击下一步 第一个&#xff1a; 第二个&#xff1a; 第三个&#xff1a; 以上任意一个放入资料库中

【PyQt5】从零开始的PyQt5 - QLabel篇

从零开始的PyQt5 - QLabel篇 引言一、简述二、例程2.1 显示到QWidget窗口上2.2 重新设置Label大小和对齐方式2.3 添加内容&#xff0c;设置边框2.4 显示富文本 三、参考 引言 QLabel主要用于显示文本或图像&#xff0c;不提供用户交互功能。本文主要简述PyQt5中的QLabel以及展…

Microsoft Rewards——微软免费发钱!

Microsoft Rewards 是微软推出的用于推广其搜索引擎 Bing 的一项服务&#xff0c;用户只需要使用 Bing 进行任何搜索&#xff0c;就可以获得对应积分&#xff0c;可以兑换礼品卡等奖励。 ps&#xff1a;Bing本来就是中国大陆最好的搜索引擎。 举例&#xff1a;假设将 Bing 最为…

基于python的天气可视化系统的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…