private void WriteFileInfo(FtpCommandContext context, FileSystemInfo fileInfo)
        {
            var result = FtpMlstFileFormater.Format(context, fileInfo);

            var data = context.Channel.Encoding.GetBytes(result);

            context.Channel.DataChannel.Send(data, 0, data.Length);
        }
        protected override object OnExecute(FtpCommandContext context)
        {
            context.Channel.CheckLogin();

            try
            {
                var path = string.Empty;
                if (!string.IsNullOrWhiteSpace(context.Statement.Argument))
                {
                    path = context.Statement.Argument;
                }

                if (string.IsNullOrWhiteSpace(path))
                {
                    path = context.Channel.CurrentDir;
                }

                var localPath = context.Channel.MapVirtualPathToLocalPath(path);
                context.Statement.Result = localPath;

                FileSystemInfo fileInfo;

                if (File.Exists(localPath))
                {
                    fileInfo = new FileInfo(localPath);
                }
                else if (Directory.Exists(localPath))
                {
                    fileInfo = new DirectoryInfo(localPath);
                }
                else
                {
                    throw new FileNotFoundException(path);
                }

                var message = string.Format("250-Listing {0}\r\n{1}250 END", path, FtpMlstFileFormater.Format(context, fileInfo));
                context.Channel.Send(message);
                return(message);
            }
            catch (IOException e)
            {
                throw new InternalException(e.Message);
            }
        }