C# winform校验文件版本差异及版本号

news2024/11/18 21:30:54

界面
在这里插入图片描述

代码

using System.Diagnostics;

namespace VersionTool
{
    public partial class Form1 : Form
    {

        List<string> fileNmaes = new List<string>() { "PhotoMes.Base.dll", "PhotoMes.App.exe", "PhotoMes.Cameras.dll" };


        public Form1()
        {
            InitializeComponent();
        }

        static bool CompareFiles(string path1, string path2)
        {
            using (var stream1 = File.OpenRead(path1))
            using (var stream2 = File.OpenRead(path2))
            {
                byte[] buffer1 = new byte[4096];
                byte[] buffer2 = new byte[4096];

                while (true)
                {
                    int bytesRead1 = stream1.Read(buffer1, 0, buffer1.Length);
                    int bytesRead2 = stream2.Read(buffer2, 0, buffer2.Length);

                    if (bytesRead1 != bytesRead2 || !BufferEquals(buffer1, buffer2, Math.Min(bytesRead1, bytesRead2)))
                        return false;

                    if (bytesRead1 == 0 && bytesRead2 == 0)
                        break;
                }
            }

            return true;
        }

        static bool BufferEquals(byte[] buffer1, byte[] buffer2, int length)
        {
            for (int i = 0; i < length; ++i)
            {
                if (buffer1[i] != buffer2[i])
                    return false;
            }

            return true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                textBox3.Text = "";
                foreach (var item in fileNmaes)
                {
                    bool isSameFileContent = CompareFiles(textBox1.Text + @$"\{item}", textBox2.Text + @$"\{item}");

                    if (isSameFileContent)
                        textBox3.Text += item + "  版本相同";
                    else
                    {
                        
                        FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(textBox1.Text + @$"\{item}");
                        // 获取版本号
                        string version = fileVersionInfo.FileVersion;
                        fileVersionInfo = FileVersionInfo.GetVersionInfo(textBox2.Text + @$"\{item}");
                        // 获取版本号
                        string version2 = fileVersionInfo.FileVersion;

                        string[] sv1 = version.Split('.');
                        string[] sv2 = version2.Split('.');

                        if(version == version2)
                        {
                            textBox3.Text += item + "  版本不同,版本号相同";
                        }
                        else
                        {
                            for (int i = 0; i < sv1.Length; i++)
                            {
                                if (Convert.ToInt16(sv1[i]) > Convert.ToInt16(sv2[i]))
                                {
                                    textBox3.Text += item + "  版本不同,路径1版本较新";
                                    break;
                                }
                                else if (Convert.ToInt16(sv1[i]) < Convert.ToInt16(sv2[i]))
                                {
                                    textBox3.Text += item + "  版本不同,路径2版本较新";
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                textBox3.Text += ex.Message;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog DBO = new FolderBrowserDialog())
            {
                if (DBO.ShowDialog() == DialogResult.OK)
                {
                    textBox1.Text = DBO.SelectedPath;
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog DBO = new FolderBrowserDialog())
            {
                if (DBO.ShowDialog() == DialogResult.OK)
                {
                    textBox2.Text = DBO.SelectedPath;
                }
            }
        }
    }
}

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

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

相关文章

零基础学习挖掘PHP网站漏洞

教程介绍 本套课程&#xff0c;分为三个阶段&#xff1a;第一阶段&#xff1a;基础篇 学习PHP开发的基础知识&#xff0c;对PHP常见的漏洞进行分析&#xff0c;第二阶段&#xff1a;进阶篇 实战PHP漏洞靶场&#xff0c;了解市面上的PHP主流网站开发技术&#xff0c;并对市面上…

【Java程序设计】【C00377】基于(JavaWeb)Springboot的社区医疗服务系统(有论文)

【C00377】基于&#xff08;JavaWeb&#xff09;Springboot的社区医疗服务系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

HDFSRPC通信框架详解

本文主要对HDFSRPC通信框架解析。包括listener&#xff0c;reader&#xff0c;handler&#xff0c;responser等实现类的源码分析。注意hadoop版本为3.1.1。 写在前面 rpc肯定依赖于socket通信&#xff0c;并且使用的是java NIO。读者最好对nio有一定的了解&#xff0c;文章中…

MySQL索引优化二

分页查询优化 很多时候我们的业务系统实现分页功能可能会用如下sql实现 select * from employees limit 10000,10;表示从表employees中取出从10001行开始的10条记录.看似只查询了10条记录,实际这条sql是先读取10010条记录,然后抛弃前10000条记录,然后读到后面10条想要的数据,…

创建云知识库,你需要了解这些

云知识库对于提升企业的知识管理水平和整体效能具有重要作用。越来越多的企业使用云知识库。但是&#xff0c;对于刚开始创建云知识库的企业来说&#xff0c;什么是云知识库&#xff1f;云知识库的作用是什么&#xff1f;如何创建云知识库&#xff1f;这就是这篇文章要解决的问…

浏览器导出excel

做java web项目时&#xff0c;经常遇到需要在页面上点击导出按钮&#xff0c;然后直浏览器接下载下来一个excel文档。 比如一个List<Person>的集合&#xff0c;需要将每个Person当做一行&#xff0c;输出到excel中去。其中Person实体类如下&#xff1a; import lombok.…

ChatGPT助力论文写作:详细步骤解析

前言 在论文写作过程中&#xff0c;尽管人工智能工具如ChatGPT能为我们提供有效的辅助&#xff0c;但我们必须铭记&#xff0c;这些工具并不能完全取代我们的思考与判断能力。本指南将详尽地展示如何利用ChatGPT辅助论文写作的全过程&#xff0c;旨在帮助您更高效地完成学术任…

hadoop安装及基本使用

环境准备 三台centos7虚拟机&#xff0c;设置固定ip&#xff08;自己设置&#xff09;&#xff0c;设置ssh秘密登录&#xff08;自己设置&#xff09;&#xff0c;安装jdk8&#xff08;自己安装&#xff09; 准备安装包hadoop-3.3.6.tar.gz 位置在/home/hadoop 准备服务器之间…

Ubuntu 下统计文件数量的命令

参考:https://blog.csdn.net/kxh123456/article/details/123811580 查看当前目录下的文件数量&#xff08;不包含子目录中的文件&#xff09; ls -l|grep "^-"| wc -l实例展示&#xff1a;如下图所示&#xff0c;当前路径下&#xff0c;有2个json文件和2个文件夹&a…

JavaWeb学习笔记01

一、教程简介 全新JAVAWEB&#xff08;里程碑版&#xff09; 一套更适合后端工程师学习的WEB教程 All in Java 1、后端 ① Spring全家桶及微服务框架 ② 高性能数据库和消息组件 ③ Web攻击防护安全控制手段 ④ 其他第三方SDK生态环境 ...... 2、前端 ① 视图三大件&…

第十一届蓝桥杯大赛第二场省赛试题 CC++ 研究生组-寻找2020

数据很恶心&#xff0c;但是考点挺友好~ 把测试数据黏贴到记事本中&#xff0c;知测试数据的行列数 然后根据规则判断2020是否出现&#xff0c;并累计其次数即可。 判断可能需要注意超出下标&#xff0c;可以索性把数组定大些。 #include<stdio.h> const int N 310; ch…

管理能力学习笔记三:管理者的时间管理法

时间管理三步法 1、对任务进行分类 2、估算任务时间 3、持续反思评估 对任务进行分类 分类方法&#xff1a;时间管理四象限 A类 B类 C类 D类 估算时间 需要预留休息时间和机动时间 持续反思评估 核对检查任务 自我提问 处理日常干扰的办法 对事情发出提问 对话内容进行…

爬虫基础训练题

1.抓取imooc网站实战课程部分的课程名称&#xff08;所有课程大概7页&#xff0c;抓取1到5页&#xff09;&#xff0c;并把所有课程名称存储为txt文件第一页地址 2.设置一个请求头&#xff08;headers&#xff09;&#xff0c;这是一个字典&#xff0c;用于在HTTP请求中设置请…

win10硬盘格式化后数据还能恢复吗?提供恢复步骤

在使用电脑的过程中&#xff0c;可能会出现需要格式化硬盘的情况。但是在进行格式化后&#xff0c;是否还有可能恢复已经删除的数据呢&#xff1f;本文将探讨Win10系统下硬盘格式化后数据恢复的可能性&#xff0c;为您提供一些实用的恢复步骤。 图片来源于网络&#xff0c;如有…

电脑windows 蓝屏【恢复—无法加载操作系统,原因是关键系统驱动程序丢失或包含错误。.......】

当你碰到下图这种情况的电脑蓝屏&#xff0c;先别急着重装系统&#xff0c;小编本来也是想重装系统的&#xff0c;但是太麻烦&#xff0c;重装系统后你还得重装各种软件&#xff0c;太麻烦了&#xff01;&#xff01; 这种情况下&#xff0c;你就拿出你的启动U盘&#xff0c;进…

“量子进展未达预期”:五角大楼推新举措,应对潜在军事危机

在当今快速变化的科技领域&#xff0c;量子技术以其革命性的潜力成为了一个关键焦点。这一技术预示着计算能力的巨大飞跃&#xff0c;也是对传统信息安全观念的全面挑战。在量子计算、通信和加密领域&#xff0c;其发展可能彻底改变我们处理数据和保护信息的方式。在全球范围内…

域风网:韩国.KR域名注册量分析

近年来,随着韩国经济实力和科技实力的不断提升,该国域名注册量呈现爆发式增长,充分展现了韩国在互联网时代的重要地位。 数据显示,截至2023年6月,韩国的顶级域名(.KR)注册量已超过360万个,较2018年同期激增近40%。这一数字不仅在全球名列前茅,也远超同期其他亚洲主要国家的域名…

使用Urllib库创建第一个爬虫程序

Urllib 是 Python 的标准库&#xff0c;它提供了一系列用于处理 URL 的函数和类&#xff0c;包括发送 HTTP 请求、处理 HTTP 响应、解析 URL 等功能。可以使用 urllib 来编写简单的网络爬虫。 request&#xff1a;它是最基本的HTTP请求模块&#xff0c;可以用来模拟发送请求。只…

STL模板 map set的使用和模拟实现

前言&#xff1a; 在本篇文章中&#xff0c;我们将为大家讲述map set这两种容器,map和set是STL容器中比较常见的两个&#xff0c;他们的核心在于使用了KV模型&#xff0c;这样更进一步让我们可以对数据进行存储&#xff0c;同时由于底层使用了红黑树进行封装&#xff0c;因此在…

what is apache?

Apache 通常指 Apache Software Foundation (ASF) 或 Apache HTTP Server&#xff0c;两者都是计算机软件领域的重要实体。 Apache 软件基金会 (ASF)&#xff1a;Apache 软件基金会是一个开发开源软件项目的非营利组织。它为涵盖软件开发各个方面的广泛项目提供支持&#xff0c…