/// <summary> /// Processes the stor. /// </summary> /// <param name="session">The handle.</param> /// <param name="path">The path.</param> /// <param name="mode">The mode.</param> /// <returns></returns> /// <exception cref="IOException"></exception> private static Stream ProcessStor(FtpSession session, FtpPath path, FtpTransferMode mode = FtpTransferMode.Binary) { var stream = OpenDataStream(session, mode, FtpStreamMode.Write); var reply = session.Expect(session.SendCommand("STOR", path.ToString()), 125, 150, 425, 550); if (!reply.Code.IsSuccess) { stream.Abort(); session.ThrowException(reply); return(null); } return(stream.Validated()); }
/// <summary> /// Processes the list. /// </summary> /// <param name="session">The handle.</param> /// <param name="path">The path.</param> /// <returns></returns> private static IList <string> ProcessList(FtpSession session, FtpPath path) { // Open data channel using (var dataStream = OpenDataStream(session, FtpTransferMode.Binary, FtpStreamMode.Read)) { // then command is sent var reply = session.Expect(session.SendCommand("LIST", session.Connection.Client.GetPlatform(session).EscapePath(path.ToString())), 125, 150, 425); if (!reply.Code.IsSuccess) { dataStream.Abort(); session.ThrowException(reply); } using (var streamReader = new StreamReader(dataStream.Validated(), session.Connection.Encoding)) { var list = new List <string>(); for (;;) { var line = streamReader.ReadLine(); if (line == null) { break; } list.Add(line); } return(list); } } }
/// <summary> /// Sends a MLST command. /// </summary> /// <param name="ftpClient">The FTP client.</param> /// <param name="path">The path.</param> /// <returns></returns> public static string Mlst(this FtpClient ftpClient, FtpPath path) { var reply = ftpClient.Process(session => { session.CheckProtection(FtpProtection.ControlChannel); return(session.Expect(session.SendCommand("MLST", ftpClient.GetPlatform(session).EscapePath(path.ToString())), 250)); }); return(reply.Lines[1]); }
private static FtpEntry ProcessGetEntry(FtpSession session, FtpPath path) { session.CheckProtection(FtpProtection.ControlChannel); var reply = session.SendCommand("STAT", session.Connection.Client.GetPlatform(session).EscapePath(path.ToString())); if ((reply.Code != 213 && reply.Code != 211) || reply.Lines.Length <= 2) { return(null); } // now get the type: the first entry is "." for folders or file itself for files/links var entry = EnumerateEntries(session.Connection.Client, path, reply.Lines.Skip(1), ignoreSpecialEntries: false).First(); // actually, it's always good here return(new FtpEntry(path, entry.Size, entry.Type, entry.Date, entry.Target)); }
/// <summary> /// Sends a MKD command (MaKe Directory). /// </summary> /// <param name="ftpClient">The FTP client.</param> /// <param name="path">The path.</param> public static void Mkd(this FtpClient ftpClient, FtpPath path) { ftpClient.Process(session => session.Expect(session.SendCommand("MKD", path.ToString()), 257)); }
/// <summary> /// Sends a DELE command (DELEte file). /// </summary> /// <param name="ftpClient">The FTP client.</param> /// <param name="path">The path.</param> /// <returns></returns> public static bool Dele(this FtpClient ftpClient, FtpPath path) { var reply = ftpClient.Process(session => session.Expect(session.SendCommand("DELE", path.ToString()), 250, 550)); return(reply.Code.IsSuccess); }
/// <summary> /// Sends a STAT command. /// </summary> /// <param name="ftpClient">The FTP client.</param> /// <param name="path">The path.</param> /// <returns></returns> public static IEnumerable <string> Stat(this FtpClient ftpClient, FtpPath path) { var reply = ftpClient.Process(session => { session.CheckProtection(FtpProtection.ControlChannel); return(session.Expect(session.SendCommand("STAT", ftpClient.GetPlatform(session).EscapePath(path.ToString())), 213, 211)); }); return(reply.Lines.Skip(1).Take(reply.Lines.Length - 2)); }