CSharpUtils.VirtualFileSystem.FileSystem.CopyTree C# (CSharp) Метод

CopyTree() статический публичный Метод

static public CopyTree ( FileSystem SourceFileSystem, String SourcePath, FileSystem DestFileSystem, String DestPath, bool>.Func ActionValidate = null, Action ActionProgress = null, byte Buffer = null ) : void
SourceFileSystem FileSystem
SourcePath String
DestFileSystem FileSystem
DestPath String
ActionValidate bool>.Func
ActionProgress Action
Buffer byte
Результат void
		static public void CopyTree(FileSystem SourceFileSystem, String SourcePath, FileSystem DestFileSystem, String DestPath, Func<FileSystemEntry, bool> ActionValidate = null, Action<FileSystemEntry, long, long> ActionProgress = null, byte[] Buffer = null)
		{
			if (ActionValidate == null) ActionValidate = ((Entry) => true);
			if (ActionProgress == null) ActionProgress = (Entry, Current, Max) => { };
			//if (Buffer == null) Buffer = new byte[16 * 1024 * 1024];
			if (Buffer == null) Buffer = new byte[2 * 1024 * 1024];

			foreach (var SourceEntry in SourceFileSystem.FindFiles(SourcePath))
			{
				var SourceFullPath = SourcePath + "/" + SourceEntry.Name;
				var DestFullPath = DestPath + "/" + SourceEntry.Name;

				if (!ActionValidate(SourceEntry)) continue;

				if (SourceEntry.Type == FileSystemEntry.EntryType.Directory)
				{
					DestFileSystem.CreateDirectory(DestFullPath, 0777, false);
					CopyTree(SourceFileSystem, SourceFullPath, DestFileSystem, DestFullPath, ActionValidate, ActionProgress, Buffer);
				}
				else
				{
					//
					if (
						!DestFileSystem.Exists(DestFullPath) ||
						(SourceFileSystem.GetFileInfo(SourceFullPath).Size != DestFileSystem.GetFileInfo(DestFullPath).Size)
					)
					{
						using (var SourceStream = SourceFileSystem.OpenFileRead(SourceFullPath))
						using (var DestStream = DestFileSystem.OpenFile(DestFullPath, FileMode.Create))
						{
							SourceStream.CopyToFast(DestStream, Buffer, (Current, Max) =>
							{
								ActionProgress(SourceEntry, Current, Max);
							});
						}
					}
				}
			}

			Buffer = null;
		}