public static FtpListItem Parse(string path, string buf, FtpCapability capabilities) { if ((buf != null) && (buf.Length > 0)) { foreach (Parser parser in Parsers) { FtpListItem item = parser(buf, capabilities); if (item != null) { if (parser == new Parser(FtpListItem.ParseVaxList)) { item.FullName = path + item.Name; } else { FtpTrace.WriteLine(item.Name); if (path.GetFtpFileName().Contains("*")) { path = path.GetFtpDirectoryName(); } if (item.Name != null) { if ((item.Name.StartsWith("/") || item.Name.StartsWith("./")) || item.Name.StartsWith("../")) { item.FullName = item.Name; item.Name = item.Name.GetFtpFileName(); } else if (path != null) { item.FullName = path.GetFtpPath(new string[] { item.Name }); } else { FtpTrace.WriteLine("Couldn't determine the full path of this object:{0}{1}", new object[] { Environment.NewLine, item.ToString() }); } } if ((item.LinkTarget != null) && !item.LinkTarget.StartsWith("/")) { if (item.LinkTarget.StartsWith("./")) { item.LinkTarget = path.GetFtpPath(new string[] { item.LinkTarget.Remove(0, 2) }); } else { item.LinkTarget = path.GetFtpPath(new string[] { item.LinkTarget }); } } } item.Input = buf; return(item); } } } return(null); }