复制特定的文件作备份-为朋友开发的小程序

//功能:问题描述:
//有一目录下有三个文件夹:
//分别为:AwsSource、BaseData、Log
//文件组织形式如下:
//d:/2004/AwsSource
//  P5875009.006(每天会更新,文件名每月更改一次)如:P5875010.006
//  Z5875009.006((每天会更新,文件名每月更改一次)如:Z5875010.006
//  W5875009.006((每天会更新,文件名每月更改一次)如:W5875010.006
//  ZZ.txt
//  FJ.txt
//  HH.txt
//  ............
//D:/2004/Log
// 20060901.Log(每天一个)如今天的文件名为:20061003.Log
// NF20060901.Log(每天一个)如今天的文件名为:NF20061003.Log
// 
//这几个文件夹下还有其它很多文件,我想每次拷贝这几个目录下最新的特定的文件(随时间不同文件名也会发生//变化)作为备份,请各位高手指教。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Windows.Forms.Design;

namespace BckFile
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
                      
        }

        public class FolderDialog : FolderNameEditor //新建一个FolderDialog类,此类从FolderNameEditor类继承
        {
            FolderNameEditor.FolderBrowser fDialog = new System.Windows.Forms.Design.FolderNameEditor.FolderBrowser();
            public FolderDialog()
            { }
            public DialogResult DisplayDialog()
            {
                return DisplayDialog("请选择一个文件夹");
            }
            public DialogResult DisplayDialog(string description)
            {
                fDialog.Description = description;
                return fDialog.ShowDialog();
            }
            public string Path
            {
                get
                { return fDialog.DirectoryPath; }
            }
            ~FolderDialog()
            { fDialog.Dispose(); }
        }

        private void createNewDir(string path) //在目标盘符里建立文件夹
    {
        //如果该文件夹不存在,则创建
        if (Directory.Exists(path))
        {
            return;
        }
        else
        {
            DirectoryInfo drInfo = Directory.CreateDirectory(path);
        }

    }

        private void button1_Click(object sender, EventArgs e) //“开始备份”按钮事件
        {
            DateTime myDateTime = DateTime.UtcNow;//建立Utc Datetime实例
            string toPath=textBox1.Text+myDateTime.ToString("yyyyMMdd");
            createNewDir(toPath);//在目标盘符中建立以当前日期为文件夹名的文件夹
            listBox1.Items.Add(toPath+"目录创建成功 ");
          
            CopyFiles(textBox2.Text, toPath);
            listBox1.Items.Add("文件备份成功 ");
        }

        private void button2_Click(object sender, EventArgs e) //“打开备份路径”按钮事件
        {
            FolderDialog openFolder = new FolderDialog();//创建打开文件夹的一个实例
            if (openFolder.DisplayDialog() == DialogResult.OK)  //选择路径
            {
                textBox1.Text = openFolder.Path.ToString();
                button1.Enabled = true;//激活“开始备份”按钮
            }
            else
            {
                textBox1.Text = "你没有选择目录";
            }
        }

        public void CopyFiles(string varFromDirectory, string varToDirectory)
        {//实现从一个目录下完整拷贝到另一个目录下。
            DateTime myDateTime = DateTime.UtcNow;//建立Utc Datetime实例
            string temp = myDateTime.ToString("yyyyMMdd");
            string fileAsName = "58750" + temp.Substring(4, 2) + "." + temp.Substring(1, 3); //生成AwsSource目录下当月需要备份的文件名
            string fileLogName = temp.Substring(1) + ".log";//生成需要备份的文件名以作比较(如:20060901.log)
            string fileLogName1 = "F" + temp + ".log";//生成需要备份的文件名以作比较(如:NF20060901.log)
            string fileLogName2 = "ssmo-" + temp.Substring(0, 6) + ".log";//生成需要备份的文件名以作比较
   
            Directory.CreateDirectory(varToDirectory);
            if (!Directory.Exists(varFromDirectory))
            {
               listBox1.Items.Add( "对不起,您要拷贝的目录不存在。");
                return;
            }

            string[] directories = Directory.GetDirectories(varFromDirectory);//取文件夹下所有文件夹名,放入数组;
            if (directories.Length > 0)
            {
                foreach (string d in directories)
                {
                    CopyFiles(d, varToDirectory + d.Substring(d.LastIndexOf("//")));//递归拷贝文件和文件夹
                    //listBox1.Items.Add(varToDirectory + d.Substring(d.LastIndexOf("//")) + "测试成功 ");
                }
            }

            string[] files = Directory.GetFiles(varFromDirectory);//取文件夹下所有文件名,放入数组;
            if (files.Length > 0)
            {
                foreach (string s in files)
                {

                    try
                    {

                        string formS = s.Substring(s.LastIndexOf("//")).Substring(2); //源文件文件名中第二位字符开始(如:P5875009.006->取得5875009.006)
                        bool flag = formS == fileAsName || formS == fileLogName || formS == fileLogName1 || formS == fileLogName2 || formS == "z.txt" || formS == "j.txt" || formS == "h.txt" || formS == "ailyNote.mdb";//判断所需要的文件是否存在
                        if(flag)
                        {                                                      
                        File.Copy(s, varToDirectory + s.Substring(s.LastIndexOf("//")));
                        listBox1.Items.Add(s + "文件备份成功 ");
                        }               

                                                                                        
                    }
                        catch(IOException iEx)
                    {
                        if (MessageBox.Show(iEx.Message+"/n确定要覆盖吗?", "出错!", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK)
                        {
                            File.Copy(s, varToDirectory + s.Substring(s.LastIndexOf("//")),true);
                            listBox1.Items.Add(iEx.Message+"覆盖成功!");
                        }
                    }
                  
                }
            }
           
        }

        private void button3_Click(object sender, EventArgs e)//打开需要备份的路径
        {
            FolderDialog openFolder = new FolderDialog();//创建打开文件夹的一个实例
            if (openFolder.DisplayDialog() == DialogResult.OK)  //选择路径
            {
                textBox2.Text = openFolder.Path.ToString();               
            }
            else
            {
                textBox2.Text = "你没有选择目录";
            }
        }

       // private bool compareFileName()
        //{
        //    DateTime myDateTime = DateTime.UtcNow;//建立Utc Datetime实例
         //   string temp = myDateTime.ToString("yyyyMMdd");
         //   string fileAsName = "58750"+temp.Substring(4,2)+"."+temp.Substring(1, 3);
        //    string fileAsName1 = "p" + fileAsName;
        //    string formS = s.Substring(s.LastIndexOf("//"));
        //    switch (formS)
        //    {
      //          case "P5875010.006":
          //          {
           //             return true;
           //         }

         //   }

      //  }

      
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值