/// <summary>
 /// recursive traversal method
 /// </summary>
 /// <param name="root">root directory</param>
 /// <param name="file">write files</param>
 /// <param name="dir">write directoru</param>
 /// <param name="obj">serialization object</param>
 /// <param name="count">file counter for serialization</param>
 /// <param name="common">flag to continue traversal</param>
 public void WalkRir(DirectoryInfo root, List <string> file, List <string> dir, Sinhronizer obj, int count = (int)Nums.Zero, bool common = false)
 {
     DirectoryInfo[] di    = null;                                                        //array for directory
     FileInfo[]      files = null;                                                        //array for files
     if (!common && dir[dir.Count - (int)Nums.One] == root.FullName)
     {
         common = true;
     }
     try
     {
         files = root.GetFiles();                                                         //add files in array files
     }
     catch (UnauthorizedAccessException e)
     {
         log.Add(e.Message);
     }
     catch (DirectoryNotFoundException e)
     {
         Console.WriteLine(e.Message);
     }
     if (files != null)                                                               //if no files
     {
         if (common)
         {
             foreach (var i in files)
             {
                 if (!file.Contains(i.FullName))
                 {
                     count++;
                     file.Add(i.FullName);
                     this.size++;
                     if (size % (int)Nums.Ten == (int)Nums.Zero)
                     {
                         Waiting();
                     }
                     if (count % (int)Nums.Ten == (int)Nums.Zero)
                     {
                         MySerialization.Serialization(obj, obj.WaySaveFile);                          //serialization 10 files
                     }
                     else if (count % (int)Nums.Fifteen == (int)Nums.Zero)
                     {
                         MySerialization.Serialization(obj, obj.WaSaveFile2);                         //serialization 15 files
                     }
                 }
             }
         }
         di = root.GetDirectories();                                                                  //add all dir root dir
         foreach (var j in di)
         {
             if (dir == null || !dir.Contains(j.FullName))
             {
                 dir.Add(j.FullName);
             }
             WalkRir(j, file, dir, obj, count, common);                                              //add dir in array dirs
         }
     }
 }
        /// <summary>
        /// method for create object and read Serialize
        /// </summary>
        /// <returns>object type Sinhronizer</returns>
        public static Sinhronizer Create()
        {
            Sinhronizer sin = new Sinhronizer();

            if (File.Exists(sin.WaySaveFile))
            {
                MySerialization.Deserialize(ref sin);
                Console.WriteLine("1)Continue synchronization");
                Console.WriteLine("Import:{0}", sin.import.Root);
                Console.WriteLine("Export:{0}", sin.export.Root);
                Console.WriteLine("2)Resync start");
                int choise = sin.TestChoise();
                if (choise == 2)
                {
                    NewSinhronizer(sin);
                }
            }
            else
            {
                NewSinhronizer(sin);
            }
            MySerialization.Serialization(sin, sin.WaySaveFile);
            return(sin);
        }