/// <summary> /// List all entries of a folder. /// </summary> /// <param name="path">The folder path to list</param> /// <param name="ctk"></param> /// <returns> /// All entries found (files, folders, symlinks) /// </returns> public async Task <IEnumerable <FtpEntry> > ListDirectoryAsync(string path = "./", CancellationToken ctk = default(CancellationToken)) { await Task.Yield(); var ftpPath = path.GetFtpPath(); _logger.Trace("Listing directory: {0} -> {1}", path, ftpPath); using (var cts = new CancellationTokenSource(TimeSpan.FromMinutes(5))) using (var linked = CancellationTokenSource.CreateLinkedTokenSource(ctk, cts.Token)) { var result = new List <FtpEntry>(); using (var sFtpClient = new Renci.SshNet.SftpClient(new ConnectionInfo(Host, Port, Credentials.UserName, new PasswordAuthenticationMethod(Credentials.UserName, Credentials.Password)))) { sFtpClient.Connect(); var rawLs = await sFtpClient.ListDirectoryAsync(path); _logger.Trace("Starting parsing response for path {0}", path); result = _parse(rawLs, linked.Token); } linked.Token.ThrowIfCancellationRequested(); return(result); } }
/// <summary> /// List all entries of a folder. /// </summary> /// <param name="path">The folder path to list</param> /// <param name="ctk"></param> /// <returns> /// All entries found (files, folders, symlinks) /// </returns> public override async Task <IEnumerable <FtpEntry> > ListDirectoryAsync(string path = "./", CancellationToken ctk = default(CancellationToken)) { await _ensureConnected(ctk); var rawLs = await _client.ListDirectoryAsync(path); _logger.Trace("Starting parsing response for path {0}", path); return(_parse(rawLs)); }
public override async Task <IEnumerable <ClientItem> > GetFileListing(string path) { try { var list = await _sftpc.ListDirectoryAsync(path); return(Array.ConvertAll(list.ToArray(), ConvertItem)); } catch (SftpPermissionDeniedException ex) { throw new PermissionDeniedException(ex); } }