C#语言实例源码系列-实现文件分割和合并

news2024/11/17 19:53:01
专栏分享
  • 点击跳转=>Unity3D特效百例
  • 点击跳转=>案例项目实战源码
  • 点击跳转=>游戏脚本-辅助自动化
  • 点击跳转=>Android控件全解手册

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜效果

在这里插入图片描述

😜代码

public partial class frmSplit : Form
{
    public frmSplit()
    {
        InitializeComponent();
    }

    #region 分割文件
    /// <summary>
    /// 分割文件
    /// </summary>
    /// <param name="strFlag">分割单位</param>
    /// <param name="intFlag">分割大小</param>
    /// <param name="strPath">分割后的文件存放路径</param>
    /// <param name="strFile">要分割的文件</param>
    /// <param name="PBar">进度条显示</param>
    public void SplitFile(string strFlag, int intFlag, string strPath, string strFile, ProgressBar PBar)
    {
        int iFileSize = 0;
        //根据选择来设定分割的小文件的大小
        switch (strFlag)
        {
            case "Byte":
                iFileSize = intFlag;
                break;
            case "KB":
                iFileSize = intFlag * 1024;
                break;
            case "MB":
                iFileSize = intFlag * 1024 * 1024;
                break;
            case "GB":
                iFileSize = intFlag * 1024 * 1024 * 1024;
                break;
        }
        //以文件的全路径对应的字符串和文件打开模式来初始化FileStream文件流实例
        FileStream SplitFileStream = new FileStream(strFile, FileMode.Open);
        //以FileStream文件流来初始化BinaryReader文件阅读器
        BinaryReader SplitFileReader = new BinaryReader(SplitFileStream);
        //每次分割读取的最大数据
        byte[] TempBytes;
        //小文件总数
        int iFileCount = (int)(SplitFileStream.Length / iFileSize);
        PBar.Maximum = iFileCount;
        if (SplitFileStream.Length % iFileSize != 0) iFileCount++;
        string[] TempExtra = strFile.Split('.');
        //循环将大文件分割成多个小文件
        for (int i = 1; i <= iFileCount; i++)
        {
            //确定小文件的文件名称
            string sTempFileName = strPath + @"\" + i.ToString().PadLeft(4, '0') + "." + TempExtra[TempExtra.Length - 1]; //小文件名
            //根据文件名称和文件打开模式来初始化FileStream文件流实例
            FileStream TempStream = new FileStream(sTempFileName, FileMode.OpenOrCreate);
            //以FileStream实例来创建、初始化BinaryWriter书写器实例
            BinaryWriter TempWriter = new BinaryWriter(TempStream);
            //从大文件中读取指定大小数据
            TempBytes = SplitFileReader.ReadBytes(iFileSize);
            //把此数据写入小文件
            TempWriter.Write(TempBytes);
            //关闭书写器,形成小文件
            TempWriter.Close();
            //关闭文件流
            TempStream.Close();
            PBar.Value = i - 1;
        }
        //关闭大文件阅读器
        SplitFileReader.Close();
        SplitFileStream.Close();
        MessageBox.Show("文件分割成功!");
    }
    #endregion

    #region 合并文件
    /// <summary>
    /// 合并文件
    /// </summary>
    /// <param name="list">要合并的文件集合</param>
    /// <param name="strPath">合并后的文件名称</param>
    /// <param name="PBar">进度条显示</param>
    public void CombinFile(string[] strFile, string strPath, ProgressBar PBar)
    {
        PBar.Maximum = strFile.Length;
        FileStream AddStream = null;
        //以合并后的文件名称和打开方式来创建、初始化FileStream文件流
        AddStream = new FileStream(strPath, FileMode.Append);
        //以FileStream文件流来初始化BinaryWriter书写器,此用以合并分割的文件
        BinaryWriter AddWriter = new BinaryWriter(AddStream);
        FileStream TempStream = null;
        BinaryReader TempReader = null;
        //循环合并小文件,并生成合并文件
        for (int i = 0; i < strFile.Length; i++)
        {
            //以小文件所对应的文件名称和打开模式来初始化FileStream文件流,起读取分割作用
            TempStream = new FileStream(strFile[i].ToString(), FileMode.Open);
            TempReader = new BinaryReader(TempStream);
            //读取分割文件中的数据,并生成合并后文件
            AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));
            //关闭BinaryReader文件阅读器
            TempReader.Close();
            //关闭FileStream文件流
            TempStream.Close();
            PBar.Value = i + 1;
        }
        //关闭BinaryWriter文件书写器
        AddWriter.Close();
        //关闭FileStream文件流
        AddStream.Close();
        MessageBox.Show("文件合并成功!");
    }
    #endregion

    private void frmSplit_Load(object sender, EventArgs e)
    {
        timer1.Start();//启动计时器
    }

    //选择要分割的文件
    private void btnSFile_Click(object sender, EventArgs e)
    {
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            txtFile.Text = openFileDialog.FileName;
        }
    }

    //执行文件分割操作
    private void btnSplit_Click(object sender, EventArgs e)
    {
        try
        {
            if (txtLength.Text == ""||txtFile.Text.Trim()==""||txtPath.Text.Trim()=="")
            {
                MessageBox.Show("请将信息填写完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtLength.Focus();
            }
            else if (cboxUnit.Text == "")
            {
                MessageBox.Show("请选择要分割的文件单位!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                cboxUnit.Focus();
            }
            else
            {
                SplitFile(cboxUnit.Text, Convert.ToInt32(txtLength.Text.Trim()), txtPath.Text, txtFile.Text, progressBar);
            }
        }
        catch { }
    }

    //选择分割后的文件存放路径
    private void btnSPath_Click(object sender, EventArgs e)
    {
        if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
        {
            txtPath.Text = folderBrowserDialog.SelectedPath;
        }
    }

    //选择要合成的文件
    private void btnCFile_Click(object sender, EventArgs e)
    {
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            string Selectfile = "";
            string[] files = openFileDialog.FileNames;
            for (int i = 0; i < files.Length; i++)
            {
                Selectfile += "," + files[i].ToString();
            }
            if (Selectfile.StartsWith(","))
            {
                Selectfile = Selectfile.Substring(1);
            }
            if (Selectfile.EndsWith(","))
            {
                Selectfile.Remove(Selectfile.LastIndexOf(","),1);
            }
            txtCFile.Text = Selectfile;
        }
    }

    //选择合成后的文件存放路径
    private void btnCPath_Click(object sender, EventArgs e)
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            txtCPath.Text = saveFileDialog.FileName;
        }
    }

    //执行合成文件操作
    private void btnCombin_Click(object sender, EventArgs e)
    {
        try
        {
            if (txtCFile.Text.Trim() == "" || txtCPath.Text.Trim() == "")
            {
                MessageBox.Show("请将信息输入完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                if (txtCFile.Text.IndexOf(",") == -1)
                    MessageBox.Show("请选择要合成的文件,最少为两个!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                {
                    string[] strFiles = txtCFile.Text.Split(',');
                    CombinFile(strFiles, txtCPath.Text, progressBar);
                }
            }
        }
        catch { }
    }

    //监视“分割”/“合并”按钮的可用状态
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (txtFile.Text != "" && txtPath.Text != "")
            btnSplit.Enabled = true;
        else
            btnSplit.Enabled = false;
        if (txtCFile.Text != "" && txtCPath.Text != "")
            btnCombin.Enabled = true;
        else
            btnCombin.Enabled = false;
    }
}
partial class frmSplit
{
    /// <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.components = new System.ComponentModel.Container();
        this.tabControl1 = new System.Windows.Forms.TabControl();
        this.tabPage1 = new System.Windows.Forms.TabPage();
        this.txtPath = new System.Windows.Forms.TextBox();
        this.txtLength = new System.Windows.Forms.TextBox();
        this.btnSPath = new System.Windows.Forms.Button();
        this.label3 = new System.Windows.Forms.Label();
        this.cboxUnit = new System.Windows.Forms.ComboBox();
        this.label2 = new System.Windows.Forms.Label();
        this.btnSplit = new System.Windows.Forms.Button();
        this.btnSFile = new System.Windows.Forms.Button();
        this.txtFile = new System.Windows.Forms.TextBox();
        this.label1 = new System.Windows.Forms.Label();
        this.tabPage2 = new System.Windows.Forms.TabPage();
        this.txtCPath = new System.Windows.Forms.TextBox();
        this.txtCFile = new System.Windows.Forms.TextBox();
        this.label5 = new System.Windows.Forms.Label();
        this.btnCPath = new System.Windows.Forms.Button();
        this.btnCombin = new System.Windows.Forms.Button();
        this.btnCFile = new System.Windows.Forms.Button();
        this.label4 = new System.Windows.Forms.Label();
        this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
        this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
        this.timer1 = new System.Windows.Forms.Timer(this.components);
        this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
        this.progressBar = new System.Windows.Forms.ProgressBar();
        this.tabControl1.SuspendLayout();
        this.tabPage1.SuspendLayout();
        this.tabPage2.SuspendLayout();
        this.SuspendLayout();
        // 
        // tabControl1
        // 
        this.tabControl1.Controls.Add(this.tabPage1);
        this.tabControl1.Controls.Add(this.tabPage2);
        this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
        this.tabControl1.Location = new System.Drawing.Point(0, 0);
        this.tabControl1.Name = "tabControl1";
        this.tabControl1.SelectedIndex = 0;
        this.tabControl1.Size = new System.Drawing.Size(354, 201);
        this.tabControl1.TabIndex = 0;
        // 
        // tabPage1
        // 
        this.tabPage1.Controls.Add(this.txtPath);
        this.tabPage1.Controls.Add(this.txtLength);
        this.tabPage1.Controls.Add(this.btnSPath);
        this.tabPage1.Controls.Add(this.label3);
        this.tabPage1.Controls.Add(this.cboxUnit);
        this.tabPage1.Controls.Add(this.label2);
        this.tabPage1.Controls.Add(this.btnSplit);
        this.tabPage1.Controls.Add(this.btnSFile);
        this.tabPage1.Controls.Add(this.txtFile);
        this.tabPage1.Controls.Add(this.label1);
        this.tabPage1.Location = new System.Drawing.Point(4, 21);
        this.tabPage1.Name = "tabPage1";
        this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
        this.tabPage1.Size = new System.Drawing.Size(346, 176);
        this.tabPage1.TabIndex = 0;
        this.tabPage1.Text = "文件分割";
        this.tabPage1.UseVisualStyleBackColor = true;
        // 
        // txtPath
        // 
        this.txtPath.Location = new System.Drawing.Point(37, 117);
        this.txtPath.Name = "txtPath";
        this.txtPath.Size = new System.Drawing.Size(256, 21);
        this.txtPath.TabIndex = 10;
        // 
        // txtLength
        // 
        this.txtLength.Location = new System.Drawing.Point(37, 72);
        this.txtLength.Name = "txtLength";
        this.txtLength.Size = new System.Drawing.Size(146, 21);
        this.txtLength.TabIndex = 9;
        // 
        // btnSPath
        // 
        this.btnSPath.Location = new System.Drawing.Point(299, 115);
        this.btnSPath.Name = "btnSPath";
        this.btnSPath.Size = new System.Drawing.Size(37, 23);
        this.btnSPath.TabIndex = 8;
        this.btnSPath.Text = "<<";
        this.btnSPath.UseVisualStyleBackColor = true;
        this.btnSPath.Click += new System.EventHandler(this.btnSPath_Click);
        // 
        // label3
        // 
        this.label3.AutoSize = true;
        this.label3.Location = new System.Drawing.Point(12, 100);
        this.label3.Name = "label3";
        this.label3.Size = new System.Drawing.Size(137, 12);
        this.label3.TabIndex = 7;
        this.label3.Text = "选择分割后文件存放路径";
        // 
        // cboxUnit
        // 
        this.cboxUnit.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
        this.cboxUnit.FormattingEnabled = true;
        this.cboxUnit.Items.AddRange(new object[] {
        "Byte",
        "KB",
        "MB",
        "GB"});
        this.cboxUnit.Location = new System.Drawing.Point(189, 73);
        this.cboxUnit.Name = "cboxUnit";
        this.cboxUnit.Size = new System.Drawing.Size(63, 20);
        this.cboxUnit.TabIndex = 6;
        // 
        // label2
        // 
        this.label2.AutoSize = true;
        this.label2.Location = new System.Drawing.Point(12, 55);
        this.label2.Name = "label2";
        this.label2.Size = new System.Drawing.Size(101, 12);
        this.label2.TabIndex = 5;
        this.label2.Text = "设置分割文件大小";
        // 
        // btnSplit
        // 
        this.btnSplit.Location = new System.Drawing.Point(261, 26);
        this.btnSplit.Name = "btnSplit";
        this.btnSplit.Size = new System.Drawing.Size(75, 23);
        this.btnSplit.TabIndex = 3;
        this.btnSplit.Text = "分割";
        this.btnSplit.UseVisualStyleBackColor = true;
        this.btnSplit.Click += new System.EventHandler(this.btnSplit_Click);
        // 
        // btnSFile
        // 
        this.btnSFile.Location = new System.Drawing.Point(220, 26);
        this.btnSFile.Name = "btnSFile";
        this.btnSFile.Size = new System.Drawing.Size(40, 23);
        this.btnSFile.TabIndex = 2;
        this.btnSFile.Text = "<<";
        this.btnSFile.UseVisualStyleBackColor = true;
        this.btnSFile.Click += new System.EventHandler(this.btnSFile_Click);
        // 
        // txtFile
        // 
        this.txtFile.Location = new System.Drawing.Point(37, 27);
        this.txtFile.Name = "txtFile";
        this.txtFile.Size = new System.Drawing.Size(179, 21);
        this.txtFile.TabIndex = 1;
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(12, 10);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(113, 12);
        this.label1.TabIndex = 0;
        this.label1.Text = "请选择要分割的文件";
        // 
        // tabPage2
        // 
        this.tabPage2.Controls.Add(this.txtCPath);
        this.tabPage2.Controls.Add(this.txtCFile);
        this.tabPage2.Controls.Add(this.label5);
        this.tabPage2.Controls.Add(this.btnCPath);
        this.tabPage2.Controls.Add(this.btnCombin);
        this.tabPage2.Controls.Add(this.btnCFile);
        this.tabPage2.Controls.Add(this.label4);
        this.tabPage2.Location = new System.Drawing.Point(4, 21);
        this.tabPage2.Name = "tabPage2";
        this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
        this.tabPage2.Size = new System.Drawing.Size(346, 176);
        this.tabPage2.TabIndex = 1;
        this.tabPage2.Text = "文件合成";
        this.tabPage2.UseVisualStyleBackColor = true;
        // 
        // txtCPath
        // 
        this.txtCPath.Location = new System.Drawing.Point(37, 88);
        this.txtCPath.Name = "txtCPath";
        this.txtCPath.Size = new System.Drawing.Size(256, 21);
        this.txtCPath.TabIndex = 6;
        // 
        // txtCFile
        // 
        this.txtCFile.Location = new System.Drawing.Point(37, 44);
        this.txtCFile.Name = "txtCFile";
        this.txtCFile.Size = new System.Drawing.Size(174, 21);
        this.txtCFile.TabIndex = 5;
        // 
        // label5
        // 
        this.label5.AutoSize = true;
        this.label5.Location = new System.Drawing.Point(11, 72);
        this.label5.Name = "label5";
        this.label5.Size = new System.Drawing.Size(173, 12);
        this.label5.TabIndex = 4;
        this.label5.Text = "选择合并后文件存放路径及名称";
        // 
        // btnCPath
        // 
        this.btnCPath.Location = new System.Drawing.Point(299, 87);
        this.btnCPath.Name = "btnCPath";
        this.btnCPath.Size = new System.Drawing.Size(38, 23);
        this.btnCPath.TabIndex = 3;
        this.btnCPath.Text = "<<";
        this.btnCPath.UseVisualStyleBackColor = true;
        this.btnCPath.Click += new System.EventHandler(this.btnCPath_Click);
        // 
        // btnCombin
        // 
        this.btnCombin.Location = new System.Drawing.Point(262, 44);
        this.btnCombin.Name = "btnCombin";
        this.btnCombin.Size = new System.Drawing.Size(75, 23);
        this.btnCombin.TabIndex = 2;
        this.btnCombin.Text = "合并";
        this.btnCombin.UseVisualStyleBackColor = true;
        this.btnCombin.Click += new System.EventHandler(this.btnCombin_Click);
        // 
        // btnCFile
        // 
        this.btnCFile.Location = new System.Drawing.Point(217, 44);
        this.btnCFile.Name = "btnCFile";
        this.btnCFile.Size = new System.Drawing.Size(39, 23);
        this.btnCFile.TabIndex = 1;
        this.btnCFile.Text = "<<";
        this.btnCFile.UseVisualStyleBackColor = true;
        this.btnCFile.Click += new System.EventHandler(this.btnCFile_Click);
        // 
        // label4
        // 
        this.label4.AutoSize = true;
        this.label4.Location = new System.Drawing.Point(11, 28);
        this.label4.Name = "label4";
        this.label4.Size = new System.Drawing.Size(101, 12);
        this.label4.TabIndex = 0;
        this.label4.Text = "选择要合成的文件";
        // 
        // openFileDialog
        // 
        this.openFileDialog.Multiselect = true;
        // 
        // timer1
        // 
        this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
        // 
        // progressBar
        // 
        this.progressBar.Dock = System.Windows.Forms.DockStyle.Bottom;
        this.progressBar.Location = new System.Drawing.Point(0, 181);
        this.progressBar.Name = "progressBar";
        this.progressBar.Size = new System.Drawing.Size(354, 20);
        this.progressBar.TabIndex = 1;
        // 
        // frmSplit
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(354, 201);
        this.Controls.Add(this.progressBar);
        this.Controls.Add(this.tabControl1);
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        this.Name = "frmSplit";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "文件分割与合成";
        this.Load += new System.EventHandler(this.frmSplit_Load);
        this.tabControl1.ResumeLayout(false);
        this.tabPage1.ResumeLayout(false);
        this.tabPage1.PerformLayout();
        this.tabPage2.ResumeLayout(false);
        this.tabPage2.PerformLayout();
        this.ResumeLayout(false);

    }

    #endregion

    public System.Windows.Forms.TabControl tabControl1;
    private System.Windows.Forms.TabPage tabPage1;
    private System.Windows.Forms.TextBox txtFile;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.TabPage tabPage2;
    private System.Windows.Forms.TextBox txtPath;
    private System.Windows.Forms.TextBox txtLength;
    private System.Windows.Forms.Button btnSPath;
    private System.Windows.Forms.Label label3;
    private System.Windows.Forms.ComboBox cboxUnit;
    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.Button btnSplit;
    private System.Windows.Forms.Button btnSFile;
    private System.Windows.Forms.OpenFileDialog openFileDialog;
    private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
    private System.Windows.Forms.TextBox txtCPath;
    private System.Windows.Forms.TextBox txtCFile;
    private System.Windows.Forms.Label label5;
    private System.Windows.Forms.Button btnCPath;
    private System.Windows.Forms.Button btnCombin;
    private System.Windows.Forms.Button btnCFile;
    private System.Windows.Forms.Label label4;
    private System.Windows.Forms.Timer timer1;
    private System.Windows.Forms.SaveFileDialog saveFileDialog;
    private System.Windows.Forms.ProgressBar progressBar;
}

需要的再直接Call我,直接发。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

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

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

相关文章

腾讯云轻量应用服务器使用 WooCommerce 应用镜像搭建电商独立站

WooCommerce 是当前很受欢迎的电商独立站建站工具&#xff0c;具备开源、免费、使用简单且功能强大等特点&#xff0c;您可通过该镜像快速搭建基于 WordPress 的电商独立站。该镜像已预装 WordPress&#xff08;包含 WooCommerce 插件&#xff09;、Nginx、MariaDB、PHP 软件。…

数据结构之排序【直接选择排序和堆排序的实现及分析】内含动态演示图

文章目录引言&#xff1a;1.直接选择排序2.堆排序3.直接选择排序和堆排序的测试引言&#xff1a; 感觉今天更冷了&#xff0c;码字更加的不易&#xff0c;所以引言就简单的写一下啦&#xff01;今天我们就来了解一下什么是直接选择排序和堆排序。 1.直接选择排序 时间复杂度…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.1 Work queues 工作队列模式4.1.1 模式说明4.1.2 代码编写4.1.3 小结第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式 …

ELK第四讲之【docker安装Logstash8.4.3、集成springboot】

docker安装elasticsearch8.4.3 docker安装kibana8.4.3 一、docker安装logstash8.4.3 官方地址 https://github.com/elastic/logstash/releases 1、拉取镜像 docker pull elastic/logstash:8.4.3 2、启动容器 docker run -it -d --name logstash -p 9600:9600 -p 5044:…

十六、Docker Compose容器编排第一篇

1、概述 Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose&#xff0c;您可以使用 YAML 文件来配置应用程序的服务。然后&#xff0c;使用一个命令&#xff0c;您可以从您的配置中创建并启动所有服务。 Compose 适用于所有环境&#xff1a;生产、暂存、…

node.js+uni计算机毕设项目高校自习室座位网上预约小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

获取淘宝价格区间l-r的商品a的详细信息(商品名等)

看了一眼&#xff0c;上次更新距今2个月&#xff0c;看起来我好咕咕啊&#xff08;感叹&#xff09;&#xff0c;可是感觉这两个月也没闲着捏&#xff08;比赛&#xff0c;cf&#xff0c;期末等等&#xff0c;幸亏期末考延期了&#xff0c;我这被期末作业都整死了快&#xff09…

SpringBoot+Vue项目艺术摄影预约系统设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

Python pandas有几千个库函数,你用过几个?(2)

上一篇链接&#xff1a; Python pandas有几千个库函数&#xff0c;你用过几个&#xff1f;&#xff08;1&#xff09;_Hann Yang的博客-CSDN博客 I~Q&#xff1a; Function10~25 Types[Function][9:25] [infer_freq, interval_range, isna, isnull, json_normalize, lreshap…

微信HOOK 协议接口 实战开发篇 1.登录

使用HOOK也有不短的时间&#xff0c;写的各类接口杂乱无章 于是便有了将所有接口重构&#xff0c;整理一下的想法 顺手将整理的要点作为日志记录下来 预计每类接口写一篇日志&#xff0c;本次使用的是2022.12.24&#xff0c;当前微信最新版3.8.1.26版 言归正传&#xff0c;开始…

【秋招总结】双非本小菜鸡的坎坷秋招之路(附面经)

前言 因为大环境的影响&#xff0c;今年秋招hc骤缩&#xff0c;导致竞争的激烈程度比往年高了不少。 在秋招的时候&#xff0c;经历过简历石沉大海的无奈&#xff0c;也体验过人家收割offer而自己却依旧0offer的焦虑&#xff0c;不过好在最终也拿到了还算满意的结果。 如今我…

python爬虫把数据保存到csv、mysql中

啧&#xff0c;放假几天游戏玩腻了&#xff0c;啥都不想干&#xff0c;突然想起来python这玩意&#xff0c;无聊就来玩玩 目录 先是保存csv里面 然后保存到mysql里 目标&#xff1a;起点 主要是拿到这几个数据 分析下网页 一个li对应一本小说&#xff0c;打开li看里面的东西 …

Android ViewPager2 实现阅读器横向翻页效果(三)--- 实时动态分页及章节切换效果的原理及实现

文章目录Android ViewPager2 实现阅读器横向翻页效果&#xff08;三&#xff09;--- 实时动态分页及章节切换效果的原理及实现关键概念引入初始数据准备ViewPager Adapter 动态分页 及 第一次分页分页后更新窗口 及 首页尾页的特殊处理翻页状态监听 及 动态章节切换Android Vie…

BIT.4 Linux进程控制

目录进程创建fork函数初识写实拷贝fork常规用法fork调用失败的原因补充知识进程终止进程退出场景进程常见退出方法exit函数与_exit函数return 退出补充知识进程等待进程等待必要性进程等待的方法wait方法waitpid方法wait / waitpid 阻塞代码WIFEXITEDwait / waitpid 非阻塞代码…

LeetCode刷题复盘笔记—一文搞懂动态规划之718. 最长重复子数组问题(动态规划系列第三十一篇)

今日主要总结一下动态规划的一道题目&#xff0c;718. 最长重复子数组 题目&#xff1a;718. 最长重复子数组 Leetcode题目地址 题目描述&#xff1a; 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; …

华熙LIVE·五棵松商业北区明年国庆亮相 互动体验升级

京城着名的活力聚集地——华熙LIVE五棵松明年将增添两万多平米商业区&#xff0c;新增商业区位于现有商业区北侧并与之相连通&#xff0c;业态在承袭现有沉浸式互动体验业态基础上&#xff0c;将引进元宇宙等前沿科技和跳楼机等娱乐设施&#xff0c;使互动体验进一步升级。项目…

一文搞懂Linux内核中断机制原理与实现

为什么需要中断&#xff1f; 如果让内核定期对设备进行轮询&#xff0c;以便处理设备&#xff0c;那会做很多无用功&#xff0c;因为外设的处理速度一般慢于CPU&#xff0c;而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核&#xff0c;会是一个聪明的方式&a…

JWT渗透与攻防(一)

目录 前言 JWT漏洞介绍 案列演示之Leaky_JWT JWT漏洞具体的实现方式&#xff1a; 案列演示之JWT None Algorithm JWT漏洞工具的利用 JWT利用工具介绍 jwt_tool 漏洞利用 jwt-cracker c-jwt-cracker 前言 Json web token (JWT)相关漏洞对于渗透测试人员而言可能是一种…

node.js+uni计算机毕设项目店内点餐微信小程序LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

【Pandas入门教程】如何从现有列派生新列

如何从现有列派生新列 来源&#xff1a;Pandas官网&#xff1a;https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管&#xff1a;https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何从现有列派生新列导包数据集准备【1】如…