Exemple #1
0
        public bool CopyFrom(string dirSrc, NeedCopy needCopy = null)
        {
            if (!Directory.Exists(dirSrc))
            {
                return(false);
            }

            try
            {
                CopyDir(new DirectoryInfo(dirSrc), mDirInfo, null, needCopy);
                return(true);
            }
            catch (System.Exception ex)
            {
                GameLog.HandleIOException(ex);
                return(false);
            }
        }
Exemple #2
0
        static void CopyDir(DirectoryInfo dirSrc, DirectoryInfo dirDst, System.Action <FileInfo> action = null, NeedCopy needCopy = null)
        {
            //Profiler.BeginSample("sync:" + dirSrc.FullName + "->" + dirDst.FullName);
            FileInfo[]      fileInfosSrc = dirSrc.GetFiles();
            DirectoryInfo[] subDirsSrc   = dirSrc.GetDirectories();

            if ((fileInfosSrc == null || fileInfosSrc.Length == 0) && (subDirsSrc == null || subDirsSrc.Length == 0))
            {
                return;
            }

            if (!dirDst.Exists)
            {
                dirDst.Create();
            }

            foreach (FileInfo fileInfoSrc in fileInfosSrc)
            {
                Profiler.BeginSample("copy:" + fileInfoSrc.FullName);

                if (needCopy == null || needCopy(fileInfoSrc))
                {
                    FileInfo newFileInfo = fileInfoSrc.CopyTo(Path.Combine(dirDst.FullName, fileInfoSrc.Name), true);

                    if (action != null)
                    {
                        action(newFileInfo);
                    }
                }

                Profiler.EndSample();
            }

            foreach (DirectoryInfo subDirSrc in subDirsSrc)
            {
                CopyDir(subDirSrc, new DirectoryInfo(Path.Combine(dirDst.FullName, subDirSrc.Name)), action, needCopy);
            }

            //Profiler.EndSample();
        }