Exemplo n.º 1
0
        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
Exemplo n.º 2
0
        }//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;
                }
            }
        }
Exemplo n.º 3
0
        }//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;
          }
        }
Exemplo n.º 4
0
        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