private IEnumerable <Tuple <string, string> > GetLocalListing(string localPath, string remotePath, bool recursive) { if (string.IsNullOrWhiteSpace(localPath)) { throw new ArgumentNullException(nameof(localPath)); } if (string.IsNullOrWhiteSpace(remotePath)) { throw new ArgumentNullException(nameof(remotePath)); } List <Tuple <string, string> > listing = new List <Tuple <string, string> >(); DirectoryInfo currentDirectory = new DirectoryInfo(localPath); string nextRemotePath = FtpConfiguration.CombinePaths(remotePath, currentDirectory.Name); foreach (FileInfo fileInfo in currentDirectory.EnumerateFiles()) { listing.Add(new Tuple <string, string>(fileInfo.FullName, FtpConfiguration.CombinePaths(nextRemotePath, fileInfo.Name))); } if (recursive) { foreach (DirectoryInfo directoryInfo in currentDirectory.EnumerateDirectories()) { listing.AddRange(GetLocalListing(directoryInfo.FullName, nextRemotePath, recursive)); } } return(listing); }
protected override async Task <Action <AsyncCodeActivityContext> > ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken) { PropertyDescriptor ftpSessionProperty = context.DataContext.GetProperties()[WithFtpSession.FtpSessionPropertyName]; IFtpSession ftpSession = ftpSessionProperty?.GetValue(context.DataContext) as IFtpSession; if (ftpSession == null) { throw new InvalidOperationException("FTPSessionNotFoundException"); } string localPath = LocalPath.Get(context); string remotePath = RemotePath.Get(context); if (Directory.Exists(localPath)) { if (string.IsNullOrWhiteSpace(Path.GetExtension(remotePath))) { if (!(await ftpSession.DirectoryExistsAsync(remotePath, cancellationToken))) { if (Create) { await ftpSession.CreateDirectoryAsync(remotePath, cancellationToken); } else { throw new ArgumentException("PathNotFoundException", remotePath); } } } else { throw new InvalidOperationException("IncompatiblePathsException"); } } else { if (File.Exists(localPath)) { if (string.IsNullOrWhiteSpace(Path.GetExtension(remotePath))) { remotePath = FtpConfiguration.CombinePaths(remotePath, Path.GetFileName(localPath)); } string directoryPath = FtpConfiguration.GetDirectoryPath(remotePath); if (!(await ftpSession.DirectoryExistsAsync(directoryPath, cancellationToken))) { if (Create) { await ftpSession.CreateDirectoryAsync(directoryPath, cancellationToken); } else { throw new InvalidOperationException(directoryPath); } } } else { throw new ArgumentException("PathNotFoundException", localPath); } } await ftpSession.UploadAsync(localPath, remotePath, Overwrite, Recursive, cancellationToken); return((asyncCodeActivityContext) => { }); }