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); } }
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(); }