根据新旧文件版本或者时间对比,抽取更新文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            FileCompare com = new FileCompare();
            com.StartCompare();
        }
    }

    public class FileCompare
    {
        public DateTime JieZhiDate = DateTime.Parse("2020-01-01"); //取出修改时间大于此时间的文件
        string floadPath1 = @"C:\A\UpdateTool\";
        string floadPath2 = @"C:\A\UpdateTool\";
        string floadPath3 = @"C:\TEST\";

        /// <summary>
        /// 比较按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void StartCompare()
        {

            object[] strArr = new object[] { floadPath1, floadPath2, floadPath3 };
            Thread thread = new Thread(new ParameterizedThreadStart(StartCheck));
            thread.Start(strArr);
        }

        /// <summary>
        /// 同步文件版本
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void btnTongBu_Click()
        {

            object[] strArr = new object[] { floadPath1, floadPath3, floadPath1 };
            Thread thread = new Thread(new ParameterizedThreadStart(StartTongBu));
            thread.Start(strArr);
        }

        /// <summary>
        /// 抽取更新文件
        /// </summary>
        /// <param name="obj"></param>
        public void StartCheck(object obj)
        {
            object[] path = obj as object[];
            string strSource = path[0].ToString();    //老的文件
            string strCurren = path[1].ToString();    //新文件
            string strTarget = path[2].ToString();    //需要更新的文件

            #region 删除更新文件

            if (Directory.Exists(floadPath3))
            {
                try
                {
                    Directory.Delete(floadPath3, true);  //删除更新文件夹中文件
                    Directory.CreateDirectory(floadPath3);
                }
                catch { }

            }

            #endregion

            CheckFile(strSource, strCurren, strTarget);  //检查本目录文件

            CheckSonFolds(strSource, strCurren, strTarget);  //检查子目录更新文件
        }

        /// <summary>
        /// 同步
        /// </summary>
        /// <param name="obj"></param>
        public void StartTongBu(object obj)
        {
            object[] path = obj as object[];
            string strSource = path[0].ToString();    //需要更新的文件目录
            string strCurren = path[1].ToString();    //老的文件目录
            string strTarget = path[2].ToString();    //需要更新的文件目录

            CheckFile(strSource, strCurren, strTarget);  //检查本目录文件

            CheckSonFolds(strSource, strCurren, strTarget);  //检查子目录更新文件

        }

        /// <summary>
        /// 检查子目录更新文件
        /// </summary>
        /// <param name="strSource">源目录</param>
        /// <param name="strCurren">新目录</param>
        /// <param name="strTarget">COPY目标</param>
        public void CheckSonFolds(string strSource, string strCurren, string strTarget)
        {
            #region 搜索当前文件夹

            string[] strNewFolds = GetSonFload(strCurren);

            if (strNewFolds != null && strNewFolds.Length > 0)
            {
                for (int i = 0; i < strNewFolds.Length; i++)
                {
                    string path1 = strNewFolds[i].Replace(strCurren, strSource);
                    string path2 = strNewFolds[i];
                    string path3 = strTarget + strNewFolds[i].Replace(strCurren, "");

                    CheckFile(path1, path2, path3);  //检查文件

                    CheckSonFolds(path1, path2, path3);  //检查文件夹
                }
            }

            #endregion
        }

        /// <summary>
        /// 检查文件
        /// </summary>
        /// <param name="strSource">老目录</param>
        /// <param name="strCurren">新目录</param>
        /// <param name="strTarget">Copy目录</param>
        public void CheckFile(string strSource, string strCurren, string strTarget)
        {
            #region 检查当前目录文件
            string[] strNewFiles = GetCheckFile(strCurren);
            if (strNewFiles != null && strNewFiles.Length > 0)
            {
                for (int i = 0; i < strNewFiles.Length; i++)
                {
                    string path1 = strNewFiles[i].Replace(strCurren, strSource);
                    string path2 = strNewFiles[i];

                    //bool flag = Compare(path1, path2);//比较两个文件差异
                    //if (flag)
                    //{

                    //    if (!FilterFile(path2))    //判断文件不是需过滤文件
                    //    {
                    //        Copy(path2, strTarget);
                    //    }
                    //}
                    bool flag = Compare(path1);   //根据时间判断是否需要复制
                    if (flag)
                    {

                        if (!FilterFile(path1))    //判断文件不是需过滤文件
                        {
                            Copy(path1, strTarget);
                        }
                    }
                }
            }
            #endregion
        }

        /// <summary>
        /// 查找当前路径下的文件
        /// </summary>
        /// <param name="currentPath"></param>
        public string[] GetCheckFile(string currentPath)
        {
            if (!Directory.Exists(currentPath))
                return null;

            return Directory.GetFiles(currentPath);
        }

        /// <summary>
        /// 取出该路径所有的子目录
        /// </summary>
        /// <param name="currentPath"></param>
        /// <returns></returns>
        public string[] GetSonFload(string currentPath)
        {
            if (!Directory.Exists(currentPath))
                return null;

            return Directory.GetDirectories(currentPath);
        }

        public bool Compare(string file1)
        {

            bool result = false;
            if ("" == file1)
                return false;

            if (!File.Exists(file1))
                return false;

            FileInfo fi = new FileInfo("E:\\text.txt");
            if (fi.LastWriteTime > JieZhiDate)
            {
                return true;
            }

            return result;
        }

        /// <summary>
        /// 比较两个文件是否相等, 不相同返回True,相同返回Flase
        /// </summary>
        /// <param name="file1"></param>
        /// <param name="file2"></param>
        /// <returns></returns>
        public bool Compare(string file1, string file2)
        {
            bool result = false;
            if ("" == file1 || "" == file2)
                return false;

            if (!File.Exists(file1))
                return true;

            StreamReader sr1 = new StreamReader(file1);
            StreamReader sr2 = new StreamReader(file2);

            try
            {
                if (object.Equals(sr1.ReadToEnd(), sr2.ReadToEnd()))        //读取两个文件的内容并判断是否相同
                {
                    result = false;
                }
                else
                {
                    result = true;
                }
            }
            catch
            {

            }
            finally
            {

                sr1.Dispose();
                sr2.Dispose();
            }

            return result;
        }

        /// <summary>
        /// 复制文件
        /// </summary>
        /// <param name="newFile">新文件</param>
        /// <param name="targetPath">目标文件夹</param>
        public void Copy(string newFile, string targetPath)
        {
            string file = newFile.Substring(newFile.LastIndexOf(‘\\‘));

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

            string newFileName = targetPath + file;

            File.Copy(newFile, newFileName, true);

            FileInfo fileInfoSet = new FileInfo(newFileName);
            //去掉只读属性
            fileInfoSet.Attributes &= ~FileAttributes.ReadOnly;

        }

        /// <summary>
        /// 过滤成功返回True,否则返回False
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public bool FilterFile(string filePath)
        {
            bool result = false;

            if (string.IsNullOrEmpty(filePath))
                return true;

            int index = filePath.LastIndexOf(‘.‘);
            if (index < 0)
                return true;

            string strSuffixs = filePath.Substring(index + 1);

            IList<string> list = GetSuffixs();
            if (list.Contains(strSuffixs))
                return true;

            return result;
        }

        public IList<string> GetSuffixs()
        {
            IList<string> list = new List<string>();
            list.Add("pdb");
            return list;
        }

    }
}

原文地址:https://www.cnblogs.com/vincentvoid/p/12189295.html

时间: 2024-10-19 22:26:25

根据新旧文件版本或者时间对比,抽取更新文件的相关文章

新旧各版本的MySQL可以从这里下载

http://downloads.mysql.com/archives/ http://downloads.mysql.com/archives/installer/ 这里下载各版本的MySQL安装程序 新旧各版本的MySQL可以从这里下载

比较java新旧I/O的性能——以复制大文件为例

package newio; import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /* * 分别采用新旧I/O包的API复制文件,比较性能 */ public class CopyFileCompara { public void copyFileOld(File from,File to) throws IOException{ //使用传统的I/O流处理(加了缓冲机制) Fil

Linux中“新旧”TCP/IP工具的对比

如今很多系统管理员依然通过组合使用诸如ifconfig.route.arp和netstat等命令行工具(统称为net-tools)来配置网络功能.解决网络故障,net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具.但自2001年起,Linux社区已经对其停止维护,甚至一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2,对于网络配置工具而言,iproute2的出现旨在从功

windows系统之WSUS服务器:更改WSUS更新文件的路径

wsus补丁硬盘空间不够 wsus补丁硬盘空间不够.我部署了WSUS服务器,使用正常,现在由于补丁下载的硬盘空间不够了,我想把补丁下载的路径改到一个比较大的硬盘上,该怎么操作? 当磁盘不足的时候,如果在 WSUS 服务器上存储更新文件并且磁盘已满,则可能需要更改 WSUS 存储更新文件的位置.如果存储更新文件的磁盘出现故障并且替用磁盘使用新的驱动器号,也必须更改存储更新文件的位置. 由于磁盘空间不足,您希望将下载的更新文件搬迁到一个新的分区. 的确如此,我们可以使用WSUS中自带的wsusuti

采用 unison + inotify + rsync 实现文件触发式实时单向/双向/多向文件同步

项目有个新的需求,在多台APP服务器随机上传图片/资源文件,其中一台APP需要读取上传的图片,这样之前做的rsync+inotify的设置就无法应对了. 所以研究了下多向触发式实时同步机制,大家可以实验一下,如果有不妥的地方,请联系我修正,多谢了. 以下开始正题 一.     简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:

一个diff工具,用于判断两个目录下所有的改动(比较新旧版本文件夹)

需求: 编写一个diff工具,用于判断两个目录下所有的改动 详细介绍: 有A和B两个目录,目录所在位置及层级均不确定 需要以B为基准找出两个目录中所有有改动的文件(文件或内容增加.修改.删除),将有改动的文件放入第三个目录中,层级结构与原目录相同 将所有新增与更新信息记录到更新日志文件中 将删除信息单独记录到删除日志文件中 每次执行diff工具需要生成一个新的以日期命名的目录存放文件 使用场景: 本工具用于软件版本升级时找出两个版本间所有修改过的文件,便于增量替换. 提示:    使用CRC判断

[转帖]InfluxDB 1.2.0安装及新旧版本的注意事项

InfluxDB 1.2.0安装及新旧版本的注意事项 http://haibing.org/245?zwlqby=npztq3 挺好的文章 很好的解决了 上一个文档里面 关于 web admin 的问题 更多好文章见作者电子书集<Linux运维入门指南:生产运维需要掌握的技能> 随着大数据的爆发,系统数量也是直线上升,监控系统,收集系统运行状态成了保障业务正常运行中的重要一个环节. 针对这种产生频率快.带时间标签.测点多.信息量大的数据,时序数据库(Time Series Database,简

浅谈 angular新旧版本问题

一直在学习angularJs,之前用的版本比较老,前些天更新了一下angularJs的版本,然后发现了一些问题,希望和大家分享一下. 在老的版本里控制器直接用函数定义就可以 比如: 在angularJs1.3.0中controller 直接写成函数就可以  但是在新版本里写控制器需要这样: 新版本里 我用的 1.3.9版本,必须定义angular.module,直接写成函数的形式angularJs不识别了. 然后今天我用angular-1.3.9写了一个route,一直在报错.我就想是不是版本的

第二章-第二题(每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。)--by侯伟婷

第二题:每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令.比较项目的新旧版本的差别. 下面我将自己的练习结果和个人感受记录如下: 第一步:安装Git,设置自己的账号和邮箱,参见Git教程-廖雪峰的官方网站,网址如下参考资料1所示. 第二步:在Git中新建repository,名叫HelloWorld,并进行初始化,如图所示. 第三步:在HelloWorld版本库中新建了helloWorld.txt文件,用以练习G