/// <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 (m_customParser != null) { result = m_customParser(file, caps, client); } else { if (IsWrongParser()) { ValidateParser(new[] { file }); } // use one of the in-built parsers switch (CurrentParser) { case FtpParser.Legacy: result = ParseLegacy(path, file, caps, client); break; 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) { // apply time difference between server/client if (HasTimeOffset) { result.Modified = result.Modified - TimeOffset; } // calc absolute file paths result.CalculateFullFtpPath(client, path, false); } return(result); }