/// <summary> /// Parse raw file from server into a file object, using the currently active parser. /// </summary> public FtpListItem ParseSingleLine(string path, string file, List <FtpCapability> caps, bool isMachineList) { FtpListItem result = null; // force machine listing if it is if (isMachineList) { result = FtpMachineListParser.Parse(file, caps, client); } else { // use custom parser if given if (CurrentParser == FtpParser.Custom && client.ListingCustomParser != null) { result = client.ListingCustomParser(file, caps, client); } else { if (IsWrongParser()) { ValidateParser(new[] { file }); } // use one of the in-built parsers switch (CurrentParser) { case FtpParser.Machine: result = FtpMachineListParser.Parse(file, caps, client); break; case FtpParser.Windows: result = FtpWindowsParser.Parse(client, file); break; case FtpParser.Unix: result = FtpUnixParser.Parse(client, file); break; case FtpParser.UnixAlt: result = FtpUnixParser.ParseUnixAlt(client, file); break; case FtpParser.VMS: result = FtpVMSParser.Parse(client, file); break; case FtpParser.IBM: result = FtpIBMParser.Parse(client, file); break; case FtpParser.NonStop: result = FtpNonStopParser.Parse(client, file); break; } } } // if parsed file successfully if (result != null) { // process created date into the timezone required result.RawCreated = result.Created; if (result.Created != DateTime.MinValue) { result.Created = client.ConvertDate(result.Created); } // process modified date into the timezone required result.RawModified = result.Modified; if (result.Modified != DateTime.MinValue) { result.Modified = client.ConvertDate(result.Modified); } // calc absolute file paths result.CalculateFullFtpPath(client, path, false); } return(result); }