C#文件拷贝工具

news2024/11/19 3:48:27

目录

工具介绍

工具背景

4个文件介绍

CopyTheSpecifiedSuffixFiles.exe.config

DataSave.txt

拷贝的存储方式

文件夹介绍

源文件夹

目标文件夹

结果

使用 *.mp4

使用 *.*

重名时坚持拷贝

可能的报错

C#代码如下

Form1.cs

Form1.cs设计

APP.config

Program.cs

Form1.Designer.cs


工具介绍


工具背景

你知道为啥我今天突然写这个吗?

我昨天下载视频,发现他全部都是分文件夹存的,一个一个开太麻烦了呢,今天就写了这个哈哈哈,全部拿出来,一下子就能全部添加到播放列表了!

只拷贝指定文件后缀的东西到新的文件夹里面,不管你原来的文件夹里面都多少个子文件夹都能给你把需要的文件复制出来(但是不会复制子文件夹,即不会复制原来的存储结构,我特意这么做的)!

你上次选的这四个选项,他会记住,后面再打开就是上次的位置。


4个文件介绍


CopyTheSpecifiedSuffixFiles.exe.config

相信你一眼就能看出来这个是干什么的了,没错!这个是这个软件的默认配置,当然你也可以在DataSave.txt中改动。


DataSave.txt

一开始是没有的,后面自动生成的哦~


拷贝的存储方式

1. 保留原文件(保留目标文件夹的重名文件)

2. 替换文件(替换目标文件夹的重名文件)

3. 保留并自动增加文件名称(拷贝的时候,后面会在后面加上_1区分,如下图)

只拷贝指定文件后缀的东西到新的文件夹里面,不管你原来的文件夹里面都多少个子文件夹都能给你把需要的文件复制出来(但是不会复制子文件夹,即不会复制原来的存储结构,我特意这么做的)!(重要的事情说两遍!为啥不说三遍?哈哈哈 因为没有因为 0.o)


文件夹介绍


源文件夹


目标文件夹


结果


使用 *.mp4


使用 *.*


重名时坚持拷贝


可能的报错

https://static.dingtalk.com/media/lQLPJwXpP0_CCKDM-80B8LDvicO4vGzluQTtO_QiALoA_496_251.png

因为你缺失这个东西,下载下就行了,一个底层的小玩意儿


C#代码如下

不想一点点弄可以直接下载上传的资源。


Form1.cs

using System;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace CopyTheSpecifiedSuffixFiles
{
    public partial class frmCopyFiles : Form
    {
        public frmCopyFiles()
        {
            InitializeComponent();
        }

        private Stopwatch stopwatch = new Stopwatch();

        public void btnCopy_Click(object sender, EventArgs e)
        {
            // 创建 Stopwatch 对象
            stopwatch = new Stopwatch();

            // 开始计时
            stopwatch.Start();
            lblResDesc.ForeColor = System.Drawing.Color.Red;
            lblResDesc.Text = "正在拷贝,请稍等...";
            this.Refresh();

            string sourceFolderPath = txtSourceFolderPath.Text;
            string destinationFolderPath = txtDestinationFolderPath.Text;

            // 检查文件夹是否存在,不存在直接创建空的文件夹
            if (!Directory.Exists(sourceFolderPath)) Directory.CreateDirectory(sourceFolderPath);

            if (!Directory.Exists(destinationFolderPath)) Directory.CreateDirectory(destinationFolderPath);

            // 编辑txt文件并写入两个字符串
            string filePath = "DataSave.txt";

            // 写入文件
            using (StreamWriter writer = new StreamWriter(filePath))
            {
                writer.WriteLine(sourceFolderPath);
                writer.WriteLine(destinationFolderPath);
                writer.WriteLine(cboSuffixSelect.Text);
                writer.WriteLine(txtSuffixInfo.Text);
                writer.Flush(); // 刷新缓冲区,确保数据被写入文件
            }

            // 拷贝目标文件夹内部所有的.mp4文件至新文件夹中
            CopyFiles(sourceFolderPath, destinationFolderPath);
            lblResDesc.ForeColor = System.Drawing.Color.Green;
            lblResDesc.Text = "文件拷贝完成!";
            // 停止计时
            stopwatch.Stop();

            // 获取耗时
            TimeSpan elapsedTime = stopwatch.Elapsed;

            MessageBox.Show("文件拷贝完成!\n" + "程序执行耗时: " + Math.Round(elapsedTime.TotalMilliseconds / 1000, 1) + " 秒");
        }

        // 递归拷贝目标文件夹及其子文件夹中的所有.mp4文件至新文件夹中
        public void CopyFiles(string sourceFolderPath, string destinationFolderPath)
        {
            int fileCount = 1; // 记录已存在的文件数量

            // 获取文件列表
            string[] files = Directory.GetFiles(sourceFolderPath, txtSuffixInfo.Text);

            foreach (string file in files)
            {
                string fileName = Path.GetFileName(file);
                string destinationFilePath = Path.Combine(destinationFolderPath, fileName);

                if (File.Exists(destinationFilePath))
                {
                    string input = cboSuffixSelect.Text;
                    if (input == "1. 保留原文件")
                    {

                        continue; // 保留原文件,跳过拷贝
                    }
                    else if (input == "2. 替换文件")
                    {

                        File.Copy(file, destinationFilePath, true); // 替换文件
                    }
                    else if (input == "3. 保留并自动增加文件名称")
                    {
                        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
                        string fileExtension = Path.GetExtension(fileName);
                        string newFileName = $"{fileNameWithoutExtension}_{fileCount}{fileExtension}";
                        fileCount++;

                        destinationFilePath = Path.Combine(destinationFolderPath, newFileName);

                        try
                        {
                            File.Copy(file, destinationFilePath); // 拷贝文件
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message);
                        }
                    }
                    else
                    {
                        MessageBox.Show("请输入正确的选项!");
                        Application.Exit();
                    }
                }
                else
                {
                    File.Copy(file, destinationFilePath); // 拷贝文件
                }
            }

            string[] subDirectories = Directory.GetDirectories(sourceFolderPath);
            foreach (string subDirectory in subDirectories)
            {
                CopyFiles(subDirectory, destinationFolderPath);
            }
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            // 添加选项到 ComboBox
            cboSuffixSelect.Items.Add("1. 保留原文件");
            cboSuffixSelect.Items.Add("2. 替换文件");
            cboSuffixSelect.Items.Add("3. 保留并自动增加文件名称");

            // 设置默认选中项
            cboSuffixSelect.SelectedIndex = 2;

            // 创建一个txt文件并写入两个字符串
            string filePath = "DataSave.txt";

            // 检查文件是否存在
            if (!File.Exists(filePath))
            {
                // 创建文件并写入初始内容
                using (StreamWriter writer = new StreamWriter(filePath))
                {
                    writer.WriteLine(ConfigurationManager.AppSettings["SourceFolderPath"]);
                    writer.WriteLine(ConfigurationManager.AppSettings["DestinationFolderPath"]);
                    writer.WriteLine(ConfigurationManager.AppSettings["CopyStytle"]);
                    writer.WriteLine(ConfigurationManager.AppSettings["SuffixType"]);
                }
            }

            // 读取文件并输出每行内容
            using (StreamReader reader = new StreamReader(filePath))
            {
                txtSourceFolderPath.Text = reader.ReadLine(); // 读取第一行内容
                txtDestinationFolderPath.Text = reader.ReadLine(); // 读取第二行内容
                cboSuffixSelect.Text = reader.ReadLine();
                txtSuffixInfo.Text = reader.ReadLine();
            }
        }

        public void btnChooseSourcePath_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

            // 设置对话框的描述文本
            folderBrowserDialog.Description = "选择文件夹";

            // 显示对话框并获取用户选择的路径
            DialogResult result = folderBrowserDialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                string selectedFolderPath = folderBrowserDialog.SelectedPath;
                txtSourceFolderPath.Text = selectedFolderPath;
            }
        }

        public void btnChooseTargetPath_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            folderBrowserDialog.Description = "选择文件夹";
            DialogResult result = folderBrowserDialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                string selectedFolderPath = folderBrowserDialog.SelectedPath;
                txtDestinationFolderPath.Text = selectedFolderPath;
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Form1.cs设计


APP.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<appSettings>
		<!--源文件夹-->
		<add key="SourceFolderPath" value="D:\Code_VS2019\测试文件夹"/>
		<!--目标文件夹-->
		<add key="DestinationFolderPath" value="C:\Users\xxxxx\Desktop\拷贝结果"/>
		<!--复制方式-->
		<add key="CopyStytle" value="3. 保留并自动增加文件名称"/>
		<!--后缀格式-->
		<add key="SuffixType" value="*.mp4"/>
	</appSettings>
	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
	</startup>
</configuration>

Program.cs

using System;
using System.Windows.Forms;

namespace CopyTheSpecifiedSuffixFiles
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmCopyFiles());
        }
    }
}

Form1.Designer.cs


namespace CopyTheSpecifiedSuffixFiles
{
    partial class frmCopyFiles
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.btnCopy = new System.Windows.Forms.Button();
            this.cboSuffixSelect = new System.Windows.Forms.ComboBox();
            this.txtSourceFolderPath = new System.Windows.Forms.TextBox();
            this.txtDestinationFolderPath = new System.Windows.Forms.TextBox();
            this.lblSourceDesc = new System.Windows.Forms.Label();
            this.lblTargetDesc = new System.Windows.Forms.Label();
            this.btnChooseSourcePath = new System.Windows.Forms.Button();
            this.btnChooseTargetPath = new System.Windows.Forms.Button();
            this.lblSaveSelectDesc = new System.Windows.Forms.Label();
            this.lblSuffixSelectDesc = new System.Windows.Forms.Label();
            this.txtSuffixInfo = new System.Windows.Forms.TextBox();
            this.lblSuffixInfoDesc = new System.Windows.Forms.Label();
            this.lblResDesc = new System.Windows.Forms.Label();
            this.btnClose = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // btnCopy
            // 
            this.btnCopy.AutoSize = true;
            this.btnCopy.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnCopy.Location = new System.Drawing.Point(494, 52);
            this.btnCopy.Name = "btnCopy";
            this.btnCopy.Size = new System.Drawing.Size(107, 52);
            this.btnCopy.TabIndex = 0;
            this.btnCopy.Text = "拷贝";
            this.btnCopy.UseVisualStyleBackColor = true;
            this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click);
            // 
            // cboSuffixSelect
            // 
            this.cboSuffixSelect.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.cboSuffixSelect.FormattingEnabled = true;
            this.cboSuffixSelect.Location = new System.Drawing.Point(107, 148);
            this.cboSuffixSelect.Name = "cboSuffixSelect";
            this.cboSuffixSelect.Size = new System.Drawing.Size(198, 22);
            this.cboSuffixSelect.TabIndex = 1;
            // 
            // txtSourceFolderPath
            // 
            this.txtSourceFolderPath.Location = new System.Drawing.Point(107, 40);
            this.txtSourceFolderPath.Name = "txtSourceFolderPath";
            this.txtSourceFolderPath.Size = new System.Drawing.Size(302, 21);
            this.txtSourceFolderPath.TabIndex = 2;
            // 
            // txtDestinationFolderPath
            // 
            this.txtDestinationFolderPath.Location = new System.Drawing.Point(107, 94);
            this.txtDestinationFolderPath.Name = "txtDestinationFolderPath";
            this.txtDestinationFolderPath.Size = new System.Drawing.Size(300, 21);
            this.txtDestinationFolderPath.TabIndex = 3;
            // 
            // lblSourceDesc
            // 
            this.lblSourceDesc.AutoSize = true;
            this.lblSourceDesc.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.lblSourceDesc.Location = new System.Drawing.Point(27, 42);
            this.lblSourceDesc.Name = "lblSourceDesc";
            this.lblSourceDesc.Size = new System.Drawing.Size(76, 16);
            this.lblSourceDesc.TabIndex = 4;
            this.lblSourceDesc.Text = "源文件夹";
            // 
            // lblTargetDesc
            // 
            this.lblTargetDesc.AutoSize = true;
            this.lblTargetDesc.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.lblTargetDesc.Location = new System.Drawing.Point(12, 96);
            this.lblTargetDesc.Name = "lblTargetDesc";
            this.lblTargetDesc.Size = new System.Drawing.Size(93, 16);
            this.lblTargetDesc.TabIndex = 5;
            this.lblTargetDesc.Text = "目标文件夹";
            // 
            // btnChooseSourcePath
            // 
            this.btnChooseSourcePath.AutoSize = true;
            this.btnChooseSourcePath.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnChooseSourcePath.Location = new System.Drawing.Point(415, 37);
            this.btnChooseSourcePath.Name = "btnChooseSourcePath";
            this.btnChooseSourcePath.Size = new System.Drawing.Size(52, 26);
            this.btnChooseSourcePath.TabIndex = 6;
            this.btnChooseSourcePath.Text = "选择";
            this.btnChooseSourcePath.UseVisualStyleBackColor = true;
            this.btnChooseSourcePath.Click += new System.EventHandler(this.btnChooseSourcePath_Click);
            // 
            // btnChooseTargetPath
            // 
            this.btnChooseTargetPath.AutoSize = true;
            this.btnChooseTargetPath.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnChooseTargetPath.Location = new System.Drawing.Point(415, 91);
            this.btnChooseTargetPath.Name = "btnChooseTargetPath";
            this.btnChooseTargetPath.Size = new System.Drawing.Size(52, 26);
            this.btnChooseTargetPath.TabIndex = 7;
            this.btnChooseTargetPath.Text = "选择";
            this.btnChooseTargetPath.UseVisualStyleBackColor = true;
            this.btnChooseTargetPath.Click += new System.EventHandler(this.btnChooseTargetPath_Click);
            // 
            // lblSaveSelectDesc
            // 
            this.lblSaveSelectDesc.AutoSize = true;
            this.lblSaveSelectDesc.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.lblSaveSelectDesc.Location = new System.Drawing.Point(27, 151);
            this.lblSaveSelectDesc.Name = "lblSaveSelectDesc";
            this.lblSaveSelectDesc.Size = new System.Drawing.Size(76, 16);
            this.lblSaveSelectDesc.TabIndex = 8;
            this.lblSaveSelectDesc.Text = "存储方式";
            // 
            // lblSuffixSelectDesc
            // 
            this.lblSuffixSelectDesc.AutoSize = true;
            this.lblSuffixSelectDesc.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.lblSuffixSelectDesc.Location = new System.Drawing.Point(27, 205);
            this.lblSuffixSelectDesc.Name = "lblSuffixSelectDesc";
            this.lblSuffixSelectDesc.Size = new System.Drawing.Size(76, 16);
            this.lblSuffixSelectDesc.TabIndex = 9;
            this.lblSuffixSelectDesc.Text = "填入后缀";
            // 
            // txtSuffixInfo
            // 
            this.txtSuffixInfo.Location = new System.Drawing.Point(107, 203);
            this.txtSuffixInfo.Name = "txtSuffixInfo";
            this.txtSuffixInfo.Size = new System.Drawing.Size(131, 21);
            this.txtSuffixInfo.TabIndex = 10;
            // 
            // lblSuffixInfoDesc
            // 
            this.lblSuffixInfoDesc.AutoSize = true;
            this.lblSuffixInfoDesc.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.lblSuffixInfoDesc.ForeColor = System.Drawing.Color.DodgerBlue;
            this.lblSuffixInfoDesc.Location = new System.Drawing.Point(270, 206);
            this.lblSuffixInfoDesc.Name = "lblSuffixInfoDesc";
            this.lblSuffixInfoDesc.Size = new System.Drawing.Size(122, 14);
            this.lblSuffixInfoDesc.TabIndex = 11;
            this.lblSuffixInfoDesc.Text = "填入格式:*.mp4";
            // 
            // lblResDesc
            // 
            this.lblResDesc.AutoSize = true;
            this.lblResDesc.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.lblResDesc.ForeColor = System.Drawing.Color.Green;
            this.lblResDesc.Location = new System.Drawing.Point(338, 151);
            this.lblResDesc.Name = "lblResDesc";
            this.lblResDesc.Size = new System.Drawing.Size(263, 16);
            this.lblResDesc.TabIndex = 12;
            this.lblResDesc.Text = "请选择相应参数并点击拷贝按钮!";
            // 
            // btnClose
            // 
            this.btnClose.AutoSize = true;
            this.btnClose.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnClose.Location = new System.Drawing.Point(494, 184);
            this.btnClose.Name = "btnClose";
            this.btnClose.Size = new System.Drawing.Size(107, 52);
            this.btnClose.TabIndex = 13;
            this.btnClose.Text = "关闭";
            this.btnClose.UseVisualStyleBackColor = true;
            this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
            // 
            // frmCopyFiles
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(614, 258);
            this.Controls.Add(this.btnClose);
            this.Controls.Add(this.lblResDesc);
            this.Controls.Add(this.lblSuffixInfoDesc);
            this.Controls.Add(this.txtSuffixInfo);
            this.Controls.Add(this.lblSuffixSelectDesc);
            this.Controls.Add(this.lblSaveSelectDesc);
            this.Controls.Add(this.btnChooseTargetPath);
            this.Controls.Add(this.btnChooseSourcePath);
            this.Controls.Add(this.lblTargetDesc);
            this.Controls.Add(this.lblSourceDesc);
            this.Controls.Add(this.txtDestinationFolderPath);
            this.Controls.Add(this.txtSourceFolderPath);
            this.Controls.Add(this.cboSuffixSelect);
            this.Controls.Add(this.btnCopy);
            this.Name = "frmCopyFiles";
            this.Text = "文件拷贝工具";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button btnCopy;
        private System.Windows.Forms.ComboBox cboSuffixSelect;
        private System.Windows.Forms.TextBox txtSourceFolderPath;
        private System.Windows.Forms.TextBox txtDestinationFolderPath;
        private System.Windows.Forms.Label lblSourceDesc;
        private System.Windows.Forms.Label lblTargetDesc;
        private System.Windows.Forms.Button btnChooseSourcePath;
        private System.Windows.Forms.Button btnChooseTargetPath;
        private System.Windows.Forms.Label lblSaveSelectDesc;
        private System.Windows.Forms.Label lblSuffixSelectDesc;
        private System.Windows.Forms.TextBox txtSuffixInfo;
        private System.Windows.Forms.Label lblSuffixInfoDesc;
        private System.Windows.Forms.Label lblResDesc;
        private System.Windows.Forms.Button btnClose;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序踩坑记录

1、原生微信小程序开发&#xff0c;切换版本后一直报错&#xff0c;切回去还是报错&#xff0c;后来排查发现是编辑器未更新的问题 2、本地开发静态时&#xff0c;要把这个勾选&#xff0c;否则每次提交代码都会冲突 持续记录踩坑。。。

果粉崩溃!Icloud又要涨价?我来教你使用群晖生态将本地SSD“上云“!

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是想使用群晖生态软件&#xff0c;就必须要在服务端安装群晖系统&#xff0c;具体如何安装群晖虚拟机请参考&#xff1a; 1. 安装并配置synology drive1.1 安装群辉drive套件1.2 在局域…

Android离线文字识别-tesseract4android调用

Android在线文字识别可以调阿里云的接口Android文字识别-阿里云OCR调用__花花的博客-CSDN博客 需要离线文字识别的话&#xff0c;可以调tesseract4android。个人测试效果不是特别理想&#xff0c;但是速度真的很快&#xff0c;VIVO S10后摄照片&#xff0c;80ms内识别完成。现…

手写Spring:第13章-把AOP扩展到Bean的生命周期

文章目录 一、目标&#xff1a;把AOP扩展到Bean的生命周期二、设计&#xff1a;把AOP扩展到Bean的生命周期三、实现&#xff1a;把AOP扩展到Bean的生命周期3.1 工程结构3.2 AOP动态代理融入Bean的生命周期类图3.3 定义Advice拦截器链3.3.1 定义拦截器链接口3.3.2 方法拦截器链接…

算法笔记:堆

【如无特别说明&#xff0c;皆为最小二叉堆】 1 介绍 2 特性 结构性&#xff1a;符合完全二叉树的结构有序性&#xff1a;满足父节点小于子节点&#xff08;最小化堆&#xff09;或父节点大于子节点&#xff08;最大化堆&#xff09; 3 二叉堆的存储 顺序存储 二叉堆的有序…

问道管理:a股交易时间和规则?

A股是指中国境内流通的人民币普通股票&#xff0c;是国内投资者最为熟悉和广泛的投资工具之一。作为投资者&#xff0c;了解A股的买卖时刻和规矩是非常重要的。本文从买卖时刻、买卖规矩、买卖方式等多个视点来分析A股买卖时刻和规矩&#xff0c;期望对读者有所协助。 A股买卖…

C#事件event

事件模型的5个组成部分 事件拥有者&#xff08;event source&#xff09;&#xff08;类对象&#xff09;&#xff08;有些书将其称为事件发布者&#xff09; 事件成员&#xff08;event&#xff09;&#xff08;事件拥有者的成员&#xff09;&#xff08;事件成员就是事件本身…

2023年03月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;最短路径问题 平面上有n个点&#xff08;n<100&#xff09;&#xff0c;每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线&#xff0c;则表示可从一个点到达另一个点&#xff…

C++——STL容器【map和set】

文档&#xff1a;map、set 文章目录 &#x1f36f;1. 关联式容器&#x1fad6;2. set&#x1f37c;1. 模板参数&#x1f37c;2. 构造函数&#x1f37c;3. 修改&#x1f37c;4.操作&#x1f95b;find&#x1f95b;count&#x1f95b;lower_bound & upper_bound & equal_…

Increment Selection 插件

Increment Selection 插件实现递增 初次使用 按下快捷键 Alt Shift 鼠标左键向下拖拽 向下拖拽之后&#xff0c;在输入一个数字&#xff0c;比如我这里输入了一个数字1 然后按下快捷键 Ctrl Shift ← 进行选中数字 然后按下快捷键 Ctrl Alt i 建自动递增。 然后鼠标随…

网络是如何进行通信

网络是如何进行通信的 简介 在现代社会中&#xff0c;网络已经成为我们生活中不可或缺的一部分。从上网搜索信息、在线购物到远程工作和社交媒体&#xff0c;我们几乎无时无刻不与网络保持着联系。但是&#xff0c;网络究竟是个什么玩意&#xff0c;它是如何工作的呢&#xf…

MinIO集群模式信息泄露漏洞(CVE-2023-28432)

前言&#xff1a;MinIO是一个用Golang开发的基于Apache License v2.0开源协议的对象存储服务。虽然轻量&#xff0c;却拥有着不错的性能。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据。该漏洞会在前台泄露用户的账户和密码。 0x00 环境配置 …

数字信封技术概论

数字信封技术是一种通过加密手段实现信息保密性和验证的技术&#xff0c;它在保护敏感信息传输过程中得到了广泛应用。本文将详细介绍数字信封技术的原理、实现和应用场景。 一、数字信封技术的原理 数字信封技术是一种将对称密钥通过非对称加密手段分发的方法。在数字信封中…

《C++设计模式》——行为型

前言 行为型模式是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构&#xff0c;而且重点关注它们之间的相互作用。 Interpreter(解释器) Template Method(模板方法) Chain of Responsibility(责任链) Command(命令) Iterator(迭代器) Me…

海康NVR(Network Video Recorder)启用SSH过程摸索

文章目录 海康NVR具备的特点启用SSH模式优劣比较启用SSH模式的优势启用SSH模式的坏处 Hik NVR启用SSH功能1&#xff0c;Web登录NVR2&#xff0c;SSH登录NVR SSH shell模式特点SSH shell模式指令作用1&#xff0c;简要帮助“help”可以列出常用的shell指令部分可用shell指令输出…

实现一台电脑登录多个微信账号/一个微信账号在多台电脑登录

一、一台电脑登录多个微信账号 在电脑桌面建立一个txt文档文件。 输入内容: echo off start /d"C:\Program Files\Tencent\WeChat\" WeChat.exe start /d"C:\Program Files\Tencent\WeChat\" WeChat.exe exit 如下图&#xff0c;/d"引号内容写微信安…

KT142C-sop16语音芯片ic的串口指令详细说明_默认9600指令可设

3.1 通讯格式 支持异步串口通讯模式,通过串口接受上位机发送的命令 通讯标准:9600 bps --- 可以发送指令修改&#xff0c;并且记忆&#xff0c;详见3.4.5 数据位 :8 停止位 :1 校验位 :none 流控制 :none 格式&#xff1a;$S VER Len CMD Feedback para1 …

简单便捷的行为验证码,让登录更轻松

前言 在当今数字化的世界里&#xff0c;登录账户已成为我们日常生活中不可或缺的一部分。然而&#xff0c;传统的输入验证码方式却常常给用户带来不必要的繁琐和麻烦。为了解决这一问题&#xff0c;简单便捷的行为验证码应运而生&#xff0c;让登录变得更加轻松。 行为验证码…

TuyaOS Sensor Hub组件介绍

文章目录 Sensor Hub 设计思想分层设计Sensor Hub 层(tdl)Sensor Driver 层(tdd) 传感数据元素类型抽象传感器采集策略 Sensor Hub 对上数据与接口数据结构1. 数据读取的触发模式2. 元素型数据订阅规则3. 数据就绪通知回调4. 传感设备信息 应用接口1. 创建传感器实例2. 启动传感…

vue3路由跳转params传参接收不到

import { useRouter } from "vue-router";const router useRouter(); // 提现记录 const withdrawalClick (item) > {router.push({ name: "Devwithdrawal", params: { name: 123 } }); };//跳转页面接收参数 import { useRoute } from "vue-rou…