using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("start....");
            string path=Path.GetFullPath("./");
            DirectoryInfo dirinfo=new DirectoryInfo(path);
            reg r = reg.getReg();
            foreach (FileSystemInfo name in dirinfo.GetFileSystemInfos())
            {
                r.regName(name.Name);
            }
            DirectoryInfo summyinfo = new DirectoryInfo(Path.GetFullPath("summary/"));
            foreach (FileSystemInfo p in summyinfo.GetFileSystemInfos())
            {
                r.CopyEFile(Path.GetFullPath("summary/"+p.Name));
            }
            Console.WriteLine("Done!!!!");
            Console.WriteLine("Please tap random key to exit!!!");
            Console.ReadKey();
        }
    }    class reg
    {
        //private List<string> directory;
        private static reg r;
        private string patten = @"(\d*?)$";
        private string patten2 = @"^([^.]*)\.";        public static reg getReg()
        {
            if (r == null)
            {
                r = new reg();
            }
            return r;
        }        //主函数 
        public void regName(string name)
        {
            if (name == "EPCMSTTP.txt")
            {
                return;
            }
            this.checkSummary();
            string directoryName = Path.GetFullPath("./Summary") + "/" + this.getDirectoryName(name);
            if (!Directory.Exists(directoryName))
            {
                Directory.CreateDirectory(directoryName);
            }
            try
            {
                File.Copy(Path.GetFullPath(name), directoryName + "/" + name);
                string a = directoryName + "/" + name;
            }
            catch
            {
                try
                {
                    this.CopyDirectory_(Path.GetFullPath(name), directoryName );
                }
                catch { }
            }
        }        //获得分类地址
        private string getDirectoryName(string name)
        {
            string directionName = name;
            if (Regex.IsMatch(name, patten2))
            {
                directionName = Regex.Match(name, patten2).Groups[1].Value;
            }
            string spit = Regex.Match(directionName, patten).Groups[1].Value.ToString();
            if (!string.IsNullOrEmpty(spit))
            {
                directionName = Regex.Match(directionName, @"(.*)" + spit + "$").Groups[1].Value.ToString();
            }
            return directionName;
        }        //检测“summary”是否存在
        private void checkSummary()
        {
            if (!Directory.Exists(Path.GetFullPath("./Summary")))
            {
                Directory.CreateDirectory(Path.GetFullPath("./Summary"));
            }
        }        /// <summary>
        /// 文件夹复制(网上来)
        /// </summary>
        /// <param name="srcdir">要复制的文件夹路径</param>
        /// <param name="desdir">要复制到那里</param>
        private void CopyDirectory_(string srcdir, string desdir)
        {
            string folderName = srcdir.Substring(srcdir.LastIndexOf("\\") + 1);            string desfolderdir = desdir + "\\" + folderName;            if (desdir.LastIndexOf("\\") == (desdir.Length - 1))
            {
                desfolderdir = desdir + folderName;
            }
            string[] filenames = Directory.GetFileSystemEntries(srcdir);            foreach (string file in filenames)// 遍历所有的文件和目录
            {
                if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
                {                    string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + 1);
                    if (!Directory.Exists(currentdir))
                    {
                        Directory.CreateDirectory(currentdir);
                    }                    CopyDirectory_(file, desfolderdir);
                }                else // 否则直接copy文件
                {
                    string srcfileName = file.Substring(file.LastIndexOf("\\") + 1);                    srcfileName = desfolderdir + "\\" + srcfileName;
                    if (!Directory.Exists(desfolderdir))
                    {
                        Directory.CreateDirectory(desfolderdir);
                    }
                    File.Copy(file, srcfileName);
                }
            }//foreach
        }//function end        //加入E……文件
        public void CopyEFile(string path)
        {            File.Copy(Path.GetFileName("EPCMSTTP.txt"), path + "/EPCMSTTP.txt");
        }
    }
}