Example #1
0
        public void StartCopying(string src, string dest)
        {
            List <TaskDelegate> taskDelegates = new List <TaskDelegate>();
            List <String>       dirFileList   = GetFiles(src);
            FileAttributes      attr          = File.GetAttributes(dest);

            if (!attr.HasFlag(FileAttributes.Directory))
            {
                return;
            }
            Directory.CreateDirectory(dest);
            CreateMissingDirs(src, dest);

            foreach (var file in dirFileList)
            {
                string fileName = file.Replace(src, dest);

                taskDelegates.Add(delegate {
                    try
                    {
                        File.Copy(file, fileName, true);
                        Interlocked.Increment(ref _copiedFiles);
                        _logBuffer.Add("from: " + file + ", to: " + fileName + " by " + Thread.CurrentThread.Name);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                });
            }
            Parallel.WaitAll(taskDelegates.ToArray());
            PrintCopiedFiles();
        }