C# Winform怎么设计串口,客户端和相机控件界面显示

首先我们必须把这个类创建好
INIAPI
using System;
using System.Text;
using System.Runtime.InteropServices;namespace Ini
{public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法,其中的节点(Section)、键(KEY)都不区分大小写* 如果指定的INI文件不存在,会自动创建该文件。* * CharSet定义的时候使用了什么类型,在使用相关方法时必须要使用相应的类型* 例如 GetPrivateProfileSectionNames声明为CharSet.Auto,那么就应该使用 Marshal.PtrToStringAuto来读取相关内容* 如果使用的是CharSet.Ansi,就应该使用Marshal.PtrToStringAnsi来读取内容* */#region API声明/// <summary>/// 获取所有节点名称(Section)/// </summary>/// <param name="lpszReturnBuffer">存放节点名称的内存地址,每个节点之间用\0分隔</param>/// <param name="nSize">内存大小(characters)</param>/// <param name="lpFileName">Ini文件</param>/// <returns>内容的实际长度,为0表示没有内容,为nSize-2表示内存大小不够</returns>[DllImport("kernel32.dll", CharSet = CharSet.Auto)]private static extern uint GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, uint nSize, string lpFileName);/// <summary>/// 获取某个指定节点(Section)中所有KEY和Value/// </summary>/// <param name="lpAppName">节点名称</param>/// <param name="lpReturnedString">返回值的内存地址,每个之间用\0分隔</param>/// <param name="nSize">内存大小(characters)</param>/// <param name="lpFileName">Ini文件</param>/// <returns>内容的实际长度,为0表示没有内容,为nSize-2表示内存大小不够</returns>[DllImport("kernel32.dll", CharSet = CharSet.Auto)]private static extern uint GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName);/// <summary>/// 读取INI文件中指定的Key的值/// </summary>/// <param name="lpAppName">节点名称。如果为null,则读取INI中所有节点名称,每个节点名称之间用\0分隔</param>/// <param name="lpKeyName">Key名称。如果为null,则读取INI中指定节点中的所有KEY,每个KEY之间用\0分隔</param>/// <param name="lpDefault">读取失败时的默认值</param>/// <param name="lpReturnedString">读取的内容缓冲区,读取之后,多余的地方使用\0填充</param>/// <param name="nSize">内容缓冲区的长度</param>/// <param name="lpFileName">INI文件名</param>/// <returns>实际读取到的长度</returns>[DllImport("kernel32.dll", CharSet = CharSet.Auto)]private static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, [In, Out] char[] lpReturnedString, uint nSize, string lpFileName);//另一种声明方式,使用 StringBuilder 作为缓冲区类型的缺点是不能接受\0字符,会将\0及其后的字符截断,//所以对于lpAppName或lpKeyName为null的情况就不适用[DllImport("kernel32.dll", CharSet = CharSet.Auto)]private static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName);//再一种声明,使用string作为缓冲区的类型同char[][DllImport("kernel32.dll", CharSet = CharSet.Auto)]private static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, string lpReturnedString, uint nSize, string lpFileName);/// <summary>/// 将指定的键值对写到指定的节点,如果已经存在则替换。/// </summary>/// <param name="lpAppName">节点,如果不存在此节点,则创建此节点</param>/// <param name="lpString">Item键值对,多个用\0分隔,形如key1=value1\0key2=value2/// <para>如果为string.Empty,则删除指定节点下的所有内容,保留节点</para>/// <para>如果为null,则删除指定节点下的所有内容,并且删除该节点</para>/// </param>/// <param name="lpFileName">INI文件</param>/// <returns>是否成功写入</returns>[DllImport("kernel32.dll", CharSet = CharSet.Auto)][return: MarshalAs(UnmanagedType.Bool)] //可以没有此行private static extern bool WritePrivateProfileSection(string lpAppName, string lpString, string lpFileName);/// <summary>/// 将指定的键和值写到指定的节点,如果已经存在则替换/// </summary>/// <param name="lpAppName">节点名称</param>/// <param name="lpKeyName">键名称。如果为null,则删除指定的节点及其所有的项目</param>/// <param name="lpString">值内容。如果为null,则删除指定节点中指定的键。</param>/// <param name="lpFileName">INI文件</param>/// <returns>操作是否成功</returns>[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]private static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);#endregion#region 封装/// <summary>/// 读取INI文件中指定INI文件中的所有节点名称(Section)/// </summary>/// <param name="iniFile">Ini文件</param>/// <returns>所有节点,没有内容返回string[0]</returns>public static string[] INIGetAllSectionNames(string iniFile){uint MAX_BUFFER = 32767; //默认为32767string[] sections = new string[0]; //返回值//申请内存IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));uint bytesReturned = IniAPI.GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, iniFile);if (bytesReturned != 0){//读取指定内存的内容string local = Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned).ToString();//每个节点之间用\0分隔,末尾有一个\0sections = local.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);}//释放内存Marshal.FreeCoTaskMem(pReturnedString);return sections;}/// <summary>/// 获取INI文件中指定节点(Section)中的所有条目(key=value形式)/// </summary>/// <param name="iniFile">Ini文件</param>/// <param name="section">节点名称</param>/// <returns>指定节点中的所有项目,没有内容返回string[0]</returns>public static string[] INIGetAllItems(string iniFile, string section){//返回值形式为 key=value,例如 Color=Reduint MAX_BUFFER = 32767; //默认为32767string[] items = new string[0]; //返回值//分配内存IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));uint bytesReturned = IniAPI.GetPrivateProfileSection(section, pReturnedString, MAX_BUFFER, iniFile);if (!(bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0)){string returnedString = Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned);items = returnedString.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);}Marshal.FreeCoTaskMem(pReturnedString); //释放内存return items;}/// <summary>/// 获取INI文件中指定节点(Section)中的所有条目的Key列表/// </summary>/// <param name="iniFile">Ini文件</param>/// <param name="section">节点名称</param>/// <returns>如果没有内容,反回string[0]</returns>public static string[] INIGetAllItemKeys(string iniFile, string section){string[] value = new string[0];const int SIZE = 1024 * 10;if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}char[] chars = new char[SIZE];uint bytesReturned = IniAPI.GetPrivateProfileString(section, null, null, chars, SIZE, iniFile);if (bytesReturned != 0){value = new string(chars).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);}chars = null;return value;}/// <summary>/// 读取INI文件中指定KEY的字符串型值/// </summary>/// <param name="iniFile">Ini文件</param>/// <param name="section">节点名称</param>/// <param name="key">键名称</param>/// <param name="defaultValue">如果没此KEY所使用的默认值</param>/// <returns>读取到的值</returns>public static string INIGetStringValue(string iniFile, string section, string key, string defaultValue){string value = defaultValue;const int SIZE = 1024 * 10;if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}if (string.IsNullOrEmpty(key)){throw new ArgumentException("必须指定键名称(key)", "key");}StringBuilder sb = new StringBuilder(SIZE);uint bytesReturned = IniAPI.GetPrivateProfileString(section, key, defaultValue, sb, SIZE, iniFile);if (bytesReturned != 0){value = sb.ToString();}sb = null;return value;}public static int GetPrivateProfileInt(string lpAppName, string lpKeyName, int Default, string lpFileName){StringBuilder lpReturnedString = new StringBuilder(1024);GetPrivateProfileString(lpAppName, lpKeyName, Convert.ToString(Default), lpReturnedString, 1024, lpFileName);return Convert.ToInt32(lpReturnedString.ToString());}public static double GetPrivateProfileDouble(string lpAppName, string lpKeyName, double Default, string lpFielName){StringBuilder lpReturnedString = new StringBuilder(1024);GetPrivateProfileString(lpAppName, lpKeyName, Convert.ToString(Default), lpReturnedString, 1024, lpFielName);//ZazaniaoDll.GetPrivateprofileString(lpAppName,lpKeyName,Convert.ToString(Default),lpReturnedString,1024,lpFielName);return Convert.ToDouble(lpReturnedString.ToString());}public static string GetPrivateProfileString(string lpAppName, string lpKeyName, string Default, string lpFileName){StringBuilder lpReturnedString = new StringBuilder(1024);GetPrivateProfileString(lpAppName, lpKeyName, Default, lpReturnedString, 1024, lpFileName);return lpReturnedString.ToString();}/// <summary>/// 在INI文件中,将指定的键值对写到指定的节点,如果已经存在则替换/// </summary>/// <param name="iniFile">INI文件</param>/// <param name="section">节点,如果不存在此节点,则创建此节点</param>/// <param name="items">键值对,多个用\0分隔,形如key1=value1\0key2=value2</param>/// <returns></returns>public static bool INIWriteItems(string iniFile, string section, string items){if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}if (string.IsNullOrEmpty(items)){throw new ArgumentException("必须指定键值对", "items");}return IniAPI.WritePrivateProfileSection(section, items, iniFile);}/// <summary>/// 在INI文件中,指定节点写入指定的键及值。如果已经存在,则替换。如果没有则创建。/// </summary>/// <param name="iniFile">INI文件</param>/// <param name="section">节点</param>/// <param name="key">键</param>/// <param name="value">值</param>/// <returns>操作是否成功</returns>public static bool INIWriteValue(string iniFile, string section, string key, string value){if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}if (string.IsNullOrEmpty(key)){throw new ArgumentException("必须指定键名称", "key");}if (value == null){throw new ArgumentException("值不能为null", "value");}return IniAPI.WritePrivateProfileString(section, key, value, iniFile);}/// <summary>/// 在INI文件中,删除指定节点中的指定的键。/// </summary>/// <param name="iniFile">INI文件</param>/// <param name="section">节点</param>/// <param name="key">键</param>/// <returns>操作是否成功</returns>public static bool INIDeleteKey(string iniFile, string section, string key){if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}if (string.IsNullOrEmpty(key)){throw new ArgumentException("必须指定键名称", "key");}return IniAPI.WritePrivateProfileString(section, key, null, iniFile);}/// <summary>/// 在INI文件中,删除指定的节点。/// </summary>/// <param name="iniFile">INI文件</param>/// <param name="section">节点</param>/// <returns>操作是否成功</returns>public static bool INIDeleteSection(string iniFile, string section){if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}return IniAPI.WritePrivateProfileString(section, null, null, iniFile);}/// <summary>/// 在INI文件中,删除指定节点中的所有内容。/// </summary>/// <param name="iniFile">INI文件</param>/// <param name="section">节点</param>/// <returns>操作是否成功</returns>public static bool INIEmptySection(string iniFile, string section){if (string.IsNullOrEmpty(section)){throw new ArgumentException("必须指定节点名称", "section");}return IniAPI.WritePrivateProfileSection(section, string.Empty, iniFile);}#endregion#endregion}
}
//先创建一个锁 private static Total instance = null;private Total() { }private static readonly object Locker=new object();public static Total Instance(){if (instance == null){lock (Locker){if (instance == null){instance = new Total();}}}return instance;}//TCP的public int TcpOpen { get; set; } = 1;public string TcpIP { get; set; }public int TcpPort { get; set; }public string Tcppath = Directory.GetCurrentDirectory() + @"\配置文件\Tcp配置文件.ini";public void LoadCamera(){TcpOpen = IniAPI.GetPrivateProfileInt("TCP的参数", "是否开启", 1, Tcppath);TcpIP = IniAPI.GetPrivateProfileString("TCP的参数", "IP地址", "127.0.0.1", Tcppath);TcpPort = IniAPI.GetPrivateProfileInt("TCP的参数", "端口号", 60000, Tcppath);}
//串口public int Serialopen { get; set; } = 1;public string Serialname { get; set; }public int Serialbaudrate { get; set; }public string Serialfixture { get; set; }public int Serialdata { get; set; }public string Serialstop { get; set; }public string Serialpath = Directory.GetCurrentDirectory() + @"\配置文件\串口配置文件.ini";public void LoadSerial(){Serialopen = IniAPI.GetPrivateProfileInt("串口的参数", "是否开启", 1, Serialpath);Serialname = IniAPI.GetPrivateProfileString("串口参数", "名称", "COM2", Serialpath);Serialbaudrate = IniAPI.GetPrivateProfileInt("串口的参数", "波特率", 9600, Serialpath);Serialfixture = IniAPI.GetPrivateProfileString("串口的参数", "校验位", "None", Serialpath); Serialdata = IniAPI.GetPrivateProfileInt("串口的参数", "数据位", 8, Serialpath);Serialstop = IniAPI.GetPrivateProfileString("串口的参数", "停止位", "One", Serialpath);}
窗体加载,想让一些数据附在文本框中
Total total = Total.Instance();private void Form4_Load(object sender, EventArgs e){total.LoadCamera();checkBox2.Checked = total.TcpOpen == 1 ? true : false;IPtxt.Text = total.TcpIP;Porttxt.Text = total.TcpPort.ToString();total.LoadSerial();checkBox1.Checked = total.Serialopen == 1 ? true : false;portname.Text = total.Serialname;baudrate.Text = total.Serialbaudrate.ToString();fixture.Text = total.Serialfixture.ToString();databits.Text = total.Serialdata.ToString();stopbits.Text = total.Serialstop.ToString();}
TCP和Serial的保存
private void button2_Click(object sender, EventArgs e){total.TcpOpen = checkBox2.Checked ? 1 : 0;total.TcpIP = IPtxt.Text;total.TcpPort = int.Parse(Porttxt.Text);IniAPI.INIWriteValue(total.Tcppath, "TCP的参数", "是否开启", total.TcpOpen.ToString());IniAPI.INIWriteValue(total.Tcppath, "TCP的参数", "IP地址", total.TcpIP);IniAPI.INIWriteValue(total.Tcppath, "TCP的参数", "端口号", total.TcpPort.ToString());MessageBox.Show("保存成功");}private void button1_Click(object sender, EventArgs e){total.Serialopen = checkBox1.Checked ? 1 : 0;total.Serialname = portname.Text;total.Serialbaudrate = Convert.ToInt32(baudrate.Text);total.Serialfixture = fixture.Text;total.Serialdata = Convert.ToInt32(databits.Text);total.Serialstop = stopbits.Text;IniAPI.INIWriteValue(total.Serialpath, "串口的参数", "是否开启", total.Serialopen.ToString());IniAPI.INIWriteValue(total.Serialpath, "串口的参数", "名称", total.Serialname);IniAPI.INIWriteValue(total.Serialpath, "串口的参数", "波特率", total.Serialbaudrate.ToString());IniAPI.INIWriteValue(total.Serialpath,"串口的参数","校验位",total.Serialfixture);IniAPI.INIWriteValue(total.Serialpath,"串口的参数","数据位",total.Serialdata.ToString());IniAPI.INIWriteValue(total.Serialpath,"串口的参数","停止位",total.Serialstop);MessageBox.Show("保存成功");}
相机参数显示--先搭好界面
效果展示
代码
public string filename = Directory.GetCurrentDirectory() + @"\配置文件\相机配置文件.ini";
private void Form1_Load(object sender, EventArgs e)
{string path = Directory.GetCurrentDirectory() + @"\配置文件";if (!File.Exists(path)){Directory.CreateDirectory(path);}string filename = path + @"\相机配置文件.ini";textBox1.Text = IniAPI.GetPrivateProfileString("相机参数", "相机名称", "MV-CS-H120", filename);textBox2.Text = IniAPI.GetPrivateProfileInt("相机参数", "曝光", 20, filename).ToString();textBox3.Text = IniAPI.GetPrivateProfileInt("相机参数", "亮度", 30, filename).ToString();textBox4.Text = IniAPI.GetPrivateProfileString("相机参数", "IP", "192.168.277", filename);
}private void button1_Click(object sender, EventArgs e)
{IniAPI.INIWriteValue(filename, "相机参数", "相机名称", textBox1.Text);IniAPI.INIWriteValue(filename, "相机参数", "曝光", textBox2.Text);IniAPI.INIWriteValue(filename, "相机参数", "亮度", textBox3.Text);IniAPI.INIWriteValue(filename, "相机参数", "IP", textBox4.Text);MessageBox.Show("保存成功");textBox1.Clear();textBox2.Clear();textBox3.Clear();textBox4.Clear();}private void button2_Click(object sender, EventArgs e)
{textBox1.Text= IniAPI.GetPrivateProfileString("相机参数", "相机名称", "",filename).ToString();textBox2.Text= IniAPI.GetPrivateProfileInt("相机参数", "曝光", 0,filename).ToString();textBox3.Text= IniAPI.GetPrivateProfileInt("相机参数", "亮度", 0,filename).ToString();textBox4.Text= IniAPI.GetPrivateProfileString("相机参数", "IP", "",filename).ToString();
}
相关文章:

C# Winform怎么设计串口,客户端和相机控件界面显示
首先我们必须把这个类创建好 INIAPI using System; using System.Text; using System.Runtime.InteropServices;namespace Ini {public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法,其中的节点(Section)、键(KEY&#x…...
C++字符串相关内容
字符串 字符串,本质上是一个接一个字符的一组字符。字母、数字、符号等。 const char* 字符串名 字符后面会有一个空终止符,为0。 字符串从指针的内存地址开始,然后继续下去,直到它碰到0,然后意识到字符串终止了。 …...

利用二分法进行 SQL 时间盲注
什么是时间盲注? SQL 盲注(Blind SQL Injection)是一种常见的 Web 安全漏洞,其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时,我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。 …...

数据库管理-第293期 奇怪的sys.user$授权+(20250210)
数据库管理293期 2025-02-10 数据库管理-第293期 奇怪的sys.user$授权(20250210)1 清空shared pool2 SR反馈总结 数据库管理-第293期 奇怪的sys.user$授权(20250210) 作者:胖头鱼的鱼缸(尹海文)…...

react实例与总结(一)
目录 一、简单认识 1.1、特点 1.2、JSX语法规则 1.3、函数组件和类式组件 1.4、类组件三大属性state、props、refs 1.4.1、state 1.4.2、props 1.4.3、refs 1.5、事件处理 1.6、收集表单数据—非受控组件和受控组件 1.7、高阶函数—函数柯里化 1.8、生命周期—新旧…...

电路研究9.3——合宙Air780EP中的AT开发指南(含TCP 示例)
根据合宙的AT研发推荐, AT指令基本上也简单看完了,这里开始转到AT的开发了。 AT 命令采用标准串口进行数据收发,将以前复杂的设备通讯方式转换成简单的串口编程, 大大简化了产品的硬件设计和软件开发成本,这使得几乎所…...

Qt 数据库SQLite 使用【01】基本功能
1.开发背景 Qt 开发过程中难免需要存储数据,可以选择保存到本地文件,但是查找比较麻烦,所以就有了数据库,主要是方便查找数据,增删改查等操作,而 SqLite 属于数据库中轻量级的存在,适合本地数据…...
stm32小白成长为高手的学习步骤和方法
我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。STM32单片机自学教程 这篇博文也是一篇不错的入门教程,初学者可以看看,讲的真心不错。 英文好的同学…...
大模型产品Deepseek(五)、本地安装部署(Docker方式)
DeepSeek 本地部署指南 DeepSeek是一款高效的智能搜索与推荐引擎,除了通过云端API提供服务外,它还支持本地部署,让开发者可以完全控制数据和计算资源。通过本地部署,您可以将DeepSeek集成到内部系统中,在私有环境下运行模型,减少对外部API的依赖,同时提升数据隐私性与响…...
Kafka 的消费offset原来是使用ZK管理,现在新版本是怎么管理的?
目录 基于 ZooKeeper 管理消费 offset 原理 缺点 新版本基于内部主题管理消费 offset 原理 优点 示例代码(Java) 在 Kafka 早期版本中,消费者的消费偏移量(offset)是存储在 ZooKeeper 中的,但由于 ZooKeeper 并不适合高频读写操作,从 Kafka 0.9 版本开始,消费偏…...

基于改进型灰狼优化算法(GWO)的无人机路径规划
内容: 基于改进型灰狼优化算法的无人机轨迹规划 GWO是一种群体智能优化算法,模仿灰狼的社会等级和狩猎行为。原始的GWO有一些局限性,比如容易陷入局部最优,收敛速度慢等,所以改进型的GWO可能通过不同的策略来优化这些…...
JS中|=是什么意思?
在JavaScript中,| 是一个位运算符的复合赋值操作,具体表示按位或赋值运算。这个操作符会对两个操作数进行按位或(|)运算,然后将结果赋值回左操作数。 let a 5; // 二进制表示为 0101let b 3; // 二进制表示为 0011a …...

快速上手Vim的使用
Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式(ctrlV进入) Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑,甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…...
RPA与深度学习结合
什么是RPA RPA即机器人流程自动化(Robotic Process Automation),它是一种利用软件机器人模拟人类在计算机上的操作,按照预设的规则自动执行一系列重复性、规律性任务的技术。这些任务可以包括数据录入、文件处理、报表生成、系统…...

在阿里云ECS上一键部署DeepSeek-R1
DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…...

长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾
2月9日,长安汽车智能化战略“北斗天枢2.0”计划暨深蓝汽车全场景智能驾驶解决方案发布会在重庆盛大召开。此次发布会标志着长安汽车正式迈入智能化战略的新纪元,携手众多“中国智驾合伙人”,共同开启全民智驾元年。 发布会上,长安…...
Aitken 逐次线性插值
Aitken 逐次线性插值 用 Lagrange 插值多项式 L n ( x ) L_n(x) Ln(x)计算函数近似值时,如需增加插值节点,那么原来算出的数据均不能利用,必须重新计算。为克服这个缺点,可用逐次线性插值方法求得高次插值。 令 I i 1 , i 2…...
docker 安装 Prometheus、Node Exporter 和 Grafana
Docker Compose 配置文件 docker-compose.yml services:prometheus:image: prom/prometheus:latestcontainer_name: prometheusvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件 - prometheus_data:/prometheus # 持久化数据存储 command:- --…...
【LeetCode 热题100】74:搜索二维矩阵(二分、线性两种方式 详细解析)(Go 语言实现)
🚀 力扣热题 74:搜索二维矩阵(详细解析) 📌 题目描述 力扣 74. 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵 matrix : 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的…...
元数据、数据元、数据元素、数据项 和 主数据的概念
一、元数据 1.概念 元数据,又称中介数据、中继数据,为描述数据的数据。主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。 2.实例 数据库中,表的名称、表字段名、其他相关的描述信息&a…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...