public void Should_Accept(string listing, FtpNodeType nodeType, int size, string when, string filename) { if (when[0] == '-') { when = DateTime.Now.Year.ToString() + when; } var dateTime = DateTime.Parse(when); var parser = new UnixDirectoryParser(null); var result = parser.Parse(listing); Assert.Equal(nodeType, result.NodeType); Assert.Equal(filename, result.Name); Assert.Equal(size, result.Size); Assert.Equal(dateTime, result.DateModified); }
/// <summary> /// Lists all nodes (files and directories) in the current working directory /// </summary> /// <param name="ftpNodeType"></param> /// <returns></returns> private async Task <ReadOnlyCollection <FtpNodeInformation> > ListNodeTypeAsync(FtpNodeType ftpNodeType) { string nodeTypeString = ftpNodeType == FtpNodeType.File ? "file" : "dir"; EnsureLoggedIn(); ftpClient.dataSocket = await ftpClient.ConnectDataSocketAsync(); if (ftpClient.dataSocket == null) { throw new FtpException("Could not establish a data connection"); } var result = await ftpClient.SendCommandAsync(FtpCommand.MLSD); if ((result.FtpStatusCode != FtpStatusCode.DataAlreadyOpen) && (result.FtpStatusCode != FtpStatusCode.OpeningData)) { throw new FtpException("Could not retrieve directory listing " + result.ResponseMessage); } var directoryListing = await RetrieveDirectoryListingAsync(); var nodes = (from node in directoryListing where node.Contains($"type={nodeTypeString}") select node.ToFtpNode()) .ToList(); return(nodes.AsReadOnly()); }
/// <summary> /// Lists all nodes (files and directories) in the current working directory /// </summary> /// <param name="ftpNodeType"></param> /// <returns></returns> private async Task <ReadOnlyCollection <FtpNodeInformation> > ListNodeTypeAsync(FtpNodeType ftpNodeType) { EnsureLoggedIn(); ftpClient.dataSocket = await ftpClient.ConnectDataSocketAsync(); if (ftpClient.dataSocket == null) { throw new FtpException("Could not establish a data connection"); } var result = await ftpClient.SendCommandAsync(new FtpCommandEnvelope { FtpCommand = FtpCommand.LIST }); if ((result.FtpStatusCode != FtpStatusCode.DataAlreadyOpen) && (result.FtpStatusCode != FtpStatusCode.OpeningData)) { throw new FtpException("Could not retrieve directory listing " + result.ResponseMessage); } var directoryListing = await RetrieveDirectoryListingAsync(); var nodes = ParseLines(directoryListing) .Where(x => x.NodeType == ftpNodeType) .ToList(); return(nodes.AsReadOnly()); }