private void deepCopyTo(FileSystemDirectory target, DirCopyFlags flags, byte[] buffer, Func <FileSystemSessionItem, bool> filter) { target.CheckCanChange(); if (flags.HasFlag(DirCopyFlags.Directories)) { foreach (var sdn in this.SubDirectoryNames) { using (var sdir = this.GetSubDirectory(sdn)) if (filter == null || filter(sdir)) { using (var newSDir = target.CreateDirectory(sdn)) { copyCommonAttributes(sdir, newSDir, buffer, flags); if (flags.HasFlag(DirCopyFlags.Readonly) && this.FileSystem.InstanceCapabilities.SupportsReadonlyDirectories && target.FileSystem.InstanceCapabilities.SupportsReadonlyDirectories) { newSDir.ReadOnly = sdir.ReadOnly; } sdir.deepCopyTo(newSDir, flags, buffer, filter); } } } } if (flags.HasFlag(DirCopyFlags.Files)) { foreach (var fn in this.FileNames) { using (var file = this.GetFile(fn)) if (filter == null || filter(file)) { using (var newFile = target.CreateFile(fn)) { copyCommonAttributes(file, newFile, buffer, flags); if (flags.HasFlag(DirCopyFlags.Readonly) && this.FileSystem.InstanceCapabilities.SupportsReadonlyFiles && target.FileSystem.InstanceCapabilities.SupportsReadonlyFiles) { newFile.ReadOnly = file.ReadOnly; } copyStream(file.FileStream, newFile.FileStream, buffer); } } } } }//deepCopyTo
}//deepCopyTo private void copyCommonAttributes(FileSystemSessionItem source, FileSystemSessionItem target, byte[] buffer, DirCopyFlags flags) { if (flags.HasFlag(DirCopyFlags.Security) && this.FileSystem.InstanceCapabilities.SupportsSecurity && target.FileSystem.InstanceCapabilities.SupportsSecurity) { copyStream(source.PermissionsStream, target.PermissionsStream, buffer); } if (flags.HasFlag(DirCopyFlags.Metadata) && this.FileSystem.InstanceCapabilities.SupportsCustomMetadata && target.FileSystem.InstanceCapabilities.SupportsCustomMetadata) { copyStream(source.MetadataStream, target.MetadataStream, buffer); } if (flags.HasFlag(DirCopyFlags.Timestamps)) { if (this.FileSystem.InstanceCapabilities.SupportsCreationTimestamps && target.FileSystem.InstanceCapabilities.SupportsCreationTimestamps) { target.CreationTimestamp = source.CreationTimestamp; } if (this.FileSystem.InstanceCapabilities.SupportsModificationTimestamps && target.FileSystem.InstanceCapabilities.SupportsModificationTimestamps) { target.ModificationTimestamp = source.ModificationTimestamp; } if (this.FileSystem.InstanceCapabilities.SupportsLastAccessTimestamps && target.FileSystem.InstanceCapabilities.SupportsLastAccessTimestamps) { target.LastAccessTimestamp = source.LastAccessTimestamp; } } }
}//deepCopyTo private void copyCommonAttributes(FileSystemSessionItem source, FileSystemSessionItem target, byte[] buffer, DirCopyFlags flags) { if (flags.HasFlag(DirCopyFlags.Security) && this.FileSystem.InstanceCapabilities.SupportsSecurity && target.FileSystem.InstanceCapabilities.SupportsSecurity) copyStream(source.PermissionsStream, target.PermissionsStream, buffer); if (flags.HasFlag(DirCopyFlags.Metadata) && this.FileSystem.InstanceCapabilities.SupportsCustomMetadata && target.FileSystem.InstanceCapabilities.SupportsCustomMetadata) copyStream(source.MetadataStream, target.MetadataStream, buffer); if (flags.HasFlag(DirCopyFlags.Timestamps)) { if (this.FileSystem.InstanceCapabilities.SupportsCreationTimestamps && target.FileSystem.InstanceCapabilities.SupportsCreationTimestamps) target.CreationTimestamp = source.CreationTimestamp; if (this.FileSystem.InstanceCapabilities.SupportsModificationTimestamps && target.FileSystem.InstanceCapabilities.SupportsModificationTimestamps) target.ModificationTimestamp = source.ModificationTimestamp; if (this.FileSystem.InstanceCapabilities.SupportsLastAccessTimestamps && target.FileSystem.InstanceCapabilities.SupportsLastAccessTimestamps) target.LastAccessTimestamp = source.LastAccessTimestamp; } }
private void deepCopyTo(FileSystemDirectory target, DirCopyFlags flags, byte[] buffer, Func<FileSystemSessionItem, bool> filter, Func<FileSystemSessionItem, bool> cancel = null) { target.CheckCanChange(); if (flags.HasFlag(DirCopyFlags.Directories)) { foreach(var sdn in this.SubDirectoryNames) using(var sdir = this.GetSubDirectory(sdn)) if (filter==null||filter(sdir)) { if (cancel != null && cancel(sdir)) return; using(var newSDir = target.CreateDirectory(sdn)) { copyCommonAttributes(sdir, newSDir, buffer, flags); if (flags.HasFlag(DirCopyFlags.Readonly) && this.FileSystem.InstanceCapabilities.SupportsReadonlyDirectories && target.FileSystem.InstanceCapabilities.SupportsReadonlyDirectories) newSDir.ReadOnly = sdir.ReadOnly; sdir.deepCopyTo(newSDir, flags, buffer, filter, cancel); } }//if } if (flags.HasFlag(DirCopyFlags.Files)) { foreach(var fn in this.FileNames) using(var file = this.GetFile(fn)) if (filter==null||filter(file)) { if (cancel != null && cancel(file)) return; using(var newFile = target.CreateFile(fn)) { copyCommonAttributes(file, newFile, buffer, flags); if (flags.HasFlag(DirCopyFlags.Readonly) && this.FileSystem.InstanceCapabilities.SupportsReadonlyFiles && target.FileSystem.InstanceCapabilities.SupportsReadonlyFiles) newFile.ReadOnly = file.ReadOnly; copyStream(file.FileStream, newFile.FileStream, buffer); } } } }//deepCopyTo