Exemplo n.º 1
0
        private void InitializeEnumerator()
        {
            if (this.source.Type == TransferLocationType.AzureFileDirectory)
            {
                var fileEnumerator = new AzureFileHierarchyEnumerator(this.source as AzureFileDirectoryLocation, this.baseDirectoryTransfer.Source.Instance as CloudFileDirectory);
                fileEnumerator.EnumerateContinuationToken = this.enumerateContinuationToken.ListContinuationToken;
                fileEnumerator.SearchPattern = this.baseDirectoryTransfer.SearchPattern;
                fileEnumerator.Recursive     = this.baseDirectoryTransfer.Recursive;

                this.transferEnumerator = fileEnumerator;
            }
            else if (this.source.Type == TransferLocationType.LocalDirectory)
            {
                var fileEnumerator = new FileHierarchyEnumerator(this.source as DirectoryLocation, this.baseDirectoryTransfer.Source.Instance as string, this.baseDirectoryTransfer.FollowSymblink);
                fileEnumerator.EnumerateContinuationToken = this.enumerateContinuationToken.ListContinuationToken;
                fileEnumerator.SearchPattern = this.baseDirectoryTransfer.SearchPattern;
                fileEnumerator.Recursive     = this.baseDirectoryTransfer.Recursive;

                this.transferEnumerator = fileEnumerator;
            }
            else
            {
                throw new NotSupportedException();
            }
        }
        private static Task CopyDirectoryInternalAsync(TransferLocation sourceLocation, TransferLocation destLocation, bool isServiceCopy, ITransferEnumerator sourceEnumerator, CopyDirectoryOptions options, TransferContext context, CancellationToken cancellationToken)
        {
            DirectoryTransfer transfer = GetOrCreateDirectoryTransfer(sourceLocation, destLocation, isServiceCopy ? TransferMethod.AsyncCopy : TransferMethod.SyncCopy, context);
            
            if (transfer.SourceEnumerator == null || !AreSameTransferEnumerators(transfer.SourceEnumerator, sourceEnumerator))
            {
                transfer.SourceEnumerator = sourceEnumerator;
            }

            if (options != null)
            {
                transfer.BlobType = options.BlobType;
            }

            return DoTransfer(transfer, context, cancellationToken);
        }
        private static bool AreSameTransferEnumerators(ITransferEnumerator enumerator1, ITransferEnumerator enumerator2)
        {
            TransferEnumeratorBase enumeratorBase1 = enumerator1 as TransferEnumeratorBase;
            TransferEnumeratorBase enumeratorBase2 = enumerator2 as TransferEnumeratorBase;

            if (enumeratorBase1 != null && enumeratorBase2 != null)
            {
                if ((enumeratorBase1.Recursive == enumeratorBase2.Recursive) &&
                    string.Equals(enumeratorBase1.SearchPattern, enumeratorBase2.SearchPattern, StringComparison.OrdinalIgnoreCase))
                {
                    return true;
                }
            }

            return false;
        }
        private static Task DownloadDirectoryInternalAsync(TransferLocation sourceLocation, TransferLocation destLocation, ITransferEnumerator sourceEnumerator, TransferContext context, CancellationToken cancellationToken)
        {
            DirectoryTransfer transfer = GetOrCreateDirectoryTransfer(sourceLocation, destLocation, TransferMethod.SyncCopy, context);
            
            if (transfer.SourceEnumerator == null || !AreSameTransferEnumerators(transfer.SourceEnumerator, sourceEnumerator))
            {
                transfer.SourceEnumerator = sourceEnumerator;
            }

            return DoTransfer(transfer, context, cancellationToken);
        }