private static List <string> ExecuteUpload( FileSystemInfo localRoot, IEnumerable <FileInfo> filesToCopy, string s3Directory, Parameters parameters, UploadOptions options, CancellationToken cancellationToken ) { cancellationToken.ThrowIfCancellationRequested(); var result = new List <string>(); using (var client = Utilities.GetS3Client(parameters, cancellationToken)) { var root = Utilities.GetS3Directory( client, s3Directory, parameters.BucketName, cancellationToken); foreach (var file in filesToCopy) { cancellationToken.ThrowIfCancellationRequested(); if (!file.Exists) { throw new IOException($"Source file does not exist: {file.FullName}"); } var s3File = new S3FileInfo( client, parameters.BucketName, Path.Combine( root.Name, options.PreserveFolderStructure ? file.FullName.Replace(Utilities.GetFullPathWithEndingSlashes(localRoot.FullName), string.Empty) : file.Name )); s3File = options.DeleteSource ? s3File.MoveFromLocal(file.FullName, options.Overwrite) : s3File.CopyFromLocal(file.FullName, options.Overwrite); result.Add(options.ReturnListOfObjectKeys ? s3File.FullName : file.FullName); } } return(result); }