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());
        }
Beispiel #3
0
        /// <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());
        }