• C# winForm 定时拷贝覆盖文件小工具


    代码大多来源于网络

    IDE:vs2017

    项目文件:

    链接: https://pan.baidu.com/s/1zA3dMoSHDdggInzOP8kKuw

    提取码: ipgr

    界面:

    代码:

    using System;
    using System.Net;
    using System.Windows.Forms;
    using System.IO;
    
    namespace CopyAndCoverFiles
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            //窗体载入时执行
            private void Form1_Load(object sender, EventArgs e)
            {
    
                //显示当前时间
                Text = "北京时间(本地):" + DateTime.Now.ToString("yyyy年MM月dd dddd HH时mm分");
    
                //启动显示时间的计时器
                TimerShowTime.Start();
                TimerShowTime.Interval = 60000;
    
                //设置倒计时定时器间隔
                TimerLastTime.Interval = 1000;//间隔1秒
            }
    
            //标题栏循环显示时间
            private void TimerShowTime_Tick(object sender, EventArgs e)
            {
                ShowTime();
            }
    
            //标题栏显示时间
            private void ShowTime()
            {
    
                if (GetNetDateTime() != "")
                {
                    Text = "北京时间(网络):" + Convert.ToDateTime(GetNetDateTime()).ToString("yyyy年MM月dd dddd HH时mm分");
                }
    
                else
                {
                    Text = "北京时间(本地):" + DateTime.Now.ToString("yyyy年MM月dd dddd HH时mm分");
                }
    
            }
    
            //获取网络时间
            private static string GetNetDateTime()
            {
    
                WebRequest request = null;
                WebResponse response = null;
                WebHeaderCollection headerCollection = null;
                string datetime = string.Empty;
    
                try
                {
                    request = WebRequest.Create("https://www.baidu.com");
                    request.Timeout = 3000;
                    request.Credentials = CredentialCache.DefaultCredentials;
                    response = request.GetResponse();
                    headerCollection = response.Headers;
    
                    foreach (var h in headerCollection.AllKeys)
                    {
    
                        if (h == "Date")
                        {
                            datetime = headerCollection[h];
                        }
    
                    }
    
                    return datetime;
                }
    
                catch (Exception) { return datetime; }
    
                finally
                {
                    if (request != null)
                    { request.Abort(); }
    
                    if (response != null)
                    { response.Close(); }
    
                    if (headerCollection != null)
                    { headerCollection.Clear(); }
                }
            }
            //选择目标文件夹按钮
            private void BtnSeleteTargetFolder_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    TxbTargetFolder.Text = folderBrowserDialog1.SelectedPath;
                }
            }
    
            //选择源文件夹按钮
            private void BtnSeleteSourceFolder_Click(object sender, EventArgs e)
            {
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    TxbSourceFolder.Text = folderBrowserDialog1.SelectedPath;
                }
    
            }
    
            //输入源文件夹后遍历显示文件
            private void TxbSourceFolder_TextChanged(object sender, EventArgs e)
            {
    
                if (TxbSourceFolder.Text.Trim() != "")
                {
                    //初始化文件列表
                    CheckedListBoxFiles.Items.Clear();
    
                    //如果文件夹存在
                    if (Directory.Exists(TxbSourceFolder.Text.Trim()))
                    {
                        try
                        {
                            DirectoryInfo sourceFolder = new DirectoryInfo(TxbSourceFolder.Text);
    
                            //遍历显示文件
                            foreach (FileInfo nextFile in sourceFolder.GetFiles())
                            {
    
                                CheckedListBoxFiles.Items.Add(nextFile.Name);
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("获取源文件内文件列表失败:" + ex.Message);
                        }
                    }
                }
            }
    
            //执行按钮
            private void BtnCountdown_Click(object sender, EventArgs e)
            {
                if (Checking())
                {
                    //弹出警告窗口
                    DialogResult warning = MessageBox.Show("目标文件夹内的同名文件将被覆盖,执行前请备份好目标文件夹,继续吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
    
                    if (warning == DialogResult.OK)
                    {
                        Start();//开始执行
                    }
                }
    
            }
    
            //暂停按钮
            private void BtnPause_Click(object sender, EventArgs e)
            {
                Pause();//暂停执行
    
                //修改设置的同步次数
                if (toolStripStatusLabel3.Text != "无限")
                {
                    NumTxbLoopCount.Value = Convert.ToDecimal(toolStripStatusLabel3.Text);
                }
                else
                {
                    NumTxbLoopCount.Value = 0;
                }
            }
    
            //倒数定时器
            private void TimerCountdown_Tick(object sender, EventArgs e)
            {
                //暂停倒计时计时器
                TimerLastTime.Stop();
    
                //更新显示倒数次数
                if (toolStripStatusLabel3.Text != "无限")
                {
                    int loopCount = Convert.ToInt32(toolStripStatusLabel3.Text);
    
                    if (loopCount > 0)
                    {
                        loopCount--;
                        //启动倒计时计时器
                        TimerLastTime.Start();
    
                        if (loopCount == 0)
                        {
                            Pause();
                        }
                    }
    
                    toolStripStatusLabel3.Text = loopCount + "";
                }
                else
                {
                    //启动倒计时计时器
                    TimerLastTime.Start();
                }
    
                //初始化倒计时显示
                toolStripStatusLabel4.Text = SecondToTime(TimerCountdown.Interval / 1000);
    
                //复制且覆盖文件
                CopyAndCoverFile();
            }
    
            //复制且覆盖文件
            private void CopyAndCoverFile()
            {
                if (Checking())
                {
                    string targetFolderPath = TxbTargetFolder.Text + @"";//目标文件夹路径
                    string sourceFolderPath = TxbSourceFolder.Text + @"";//源文件夹路径
    
                    //遍历复制选中的文件
                    for (int i = 0; i < CheckedListBoxFiles.CheckedItems.Count; i++)
                    {
                        string fileName = CheckedListBoxFiles.GetItemText(CheckedListBoxFiles.CheckedItems[i]);//取得文件名
                        try
                        {
                            File.Copy(sourceFolderPath + fileName, targetFolderPath + fileName, true);//复制覆盖同名文件
                        }
                        catch (Exception ex)
                        {
                            Pause();//暂停执行
                            MessageBox.Show("执行失败:" + ex.Message);
                        }
                    }
                }
            }
    
            //倒计时定时器调用
            private void TimerLastTime_Tick(object sender, EventArgs e)
            {
                //将时:分:秒转换为秒
                string[] str = toolStripStatusLabel4.Text.Split(new char[] { ':' });
                int lastTime = Convert.ToInt32(str[0]) * 3600 + Convert.ToInt32(str[1]) * 60 + Convert.ToInt32(str[2]);
    
                //更新倒计时
                if (lastTime == 1)
                {
                    lastTime = TimerCountdown.Interval / 1000;
                }
                else
                {
                    lastTime--;
                }
    
                toolStripStatusLabel4.Text = SecondToTime(lastTime);
            }
    
            //复制文件前检查
            private bool Checking()
            {
                bool ok = false;
                if (TxbTargetFolder.Text.Trim() != TxbSourceFolder.Text.Trim())
                {
                    //如果目标文件夹存在
                    if (Directory.Exists(TxbTargetFolder.Text))
                    {
                        //如果勾选的文件数大于0
                        if (CheckedListBoxFiles.CheckedItems.Count > 0)
                        {
    
                            if (NumTxbHour.Value == 0 && NumTxbMinute.Value == 0 && NumTxbSecond.Value == 0)
                            {
                                MessageBox.Show("倒计时不能为0");
                            }
                            else
                            {
                                ok = true;
                            }
                        }
                        else
                        {
                            MessageBox.Show("请至少勾选一个文件");
                        }
                    }
                    //目标文件夹不存在
                    else
                    {
                        Pause();//暂停执行
                        MessageBox.Show("目标文件夹不存在,请重新选择");
                    }
                }
                else
                {
                    MessageBox.Show("目标文件夹和源文件夹路径不能相同");
                }
    
                return ok;
            }
    
            //开始执行
            private void Start()
            {
    
                GroupBoxForm.Enabled = false;//禁用界面输入
                BtnCountdown.Enabled = false;//禁用执行按钮
                BtnPause.Enabled = true;//启用暂停按钮
    
                //执行间隔时间
                int countdown = 0;
                countdown += Convert.ToInt32(NumTxbHour.Value) * 3600;//小时
                countdown += Convert.ToInt32(NumTxbMinute.Value) * 60;//分钟
                countdown += Convert.ToInt32(NumTxbSecond.Value);//秒钟
    
                //初始化倒计时显示
                toolStripStatusLabel4.Text = SecondToTime(countdown);
    
                //设置倒数计时器间隔
                TimerCountdown.Interval = countdown * 1000;//单位毫秒
    
                //启动倒数计时器
                TimerCountdown.Start();
                //启动倒计时定时器
                TimerLastTime.Start();
    
                //初始化剩余执行次数
                if (NumTxbLoopCount.Value == 0)
                {
                    toolStripStatusLabel3.Text = "无限";
                }
                else
                {
                    toolStripStatusLabel3.Text = NumTxbLoopCount.Value + "";
                }
            }
    
            //暂停执行
            private void Pause()
            {
    
                //停止倒数定时器
                TimerCountdown.Stop();
                //停止倒计时定时器
                TimerLastTime.Stop();
    
                GroupBoxForm.Enabled = true;//启用界面输入
                BtnCountdown.Enabled = true;//启用执行按钮
                BtnPause.Enabled = false;//禁用暂停按钮
            }
    
            //将传入的秒钟转换为 时:分:秒 的字符串
            private string SecondToTime(int countdown)
            {
    
                string time = "";
                string[] arrLastTime = { "0", "0", "0" };//时,分,秒
                arrLastTime[0] = countdown / 3600 + "";//得出小时
    
                //得出分钟
                if ((countdown % 3600) > 0)
                {
                    arrLastTime[1] = (countdown % 3600) / 60 + "";
    
                    int second = (countdown % 3600) % 60;
                    if (second > 0)
                    {
                        arrLastTime[2] = second + "";
                    }
                }
                time = String.Join(":", arrLastTime);
    
                return time;
            }
    
            //托盘图标双击
            private void NotifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                if (WindowState == FormWindowState.Minimized)
                {
                    //还原窗体显示    
                    WindowState = FormWindowState.Normal;
                    //激活窗体并给予它焦点
                    Activate();
                    //任务栏区显示图标
                    ShowInTaskbar = true;
                    //托盘区图标隐藏
                    NotifyIcon1.Visible = false;
                }
            }
    
            //窗口最小化时
            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                //判断是否选择的是最小化按钮
                if (WindowState == FormWindowState.Minimized)
                {
                    //隐藏任务栏区图标
                    ShowInTaskbar = false;
                    //图标显示在托盘区
                    NotifyIcon1.Visible = true;
                }
            }
        }
    }
  • 相关阅读:
    fort循环
    while
    函数和数组
    case
    init进程
    权限安全:堡垒机部署实践
    tcp首部当中seq和ack的增长规律
    VRRP
    MSTP
    字符集专题
  • 原文地址:https://www.cnblogs.com/nb08611033/p/10175383.html
Copyright © 2020-2023  润新知