//功能:问题描述:
//有一目录下有三个文件夹:
//分别为: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;
// }
// }
// }
}
}