private FtpDataStream GetStream(long offset, TransferDirection dir) { m_parent.CheckSessionCurrentDirectory(); FtpSessionConnected Session = m_parent.Session; if (offset != 0) { Session.ControlChannel.REST(offset); } FtpDataStream stream = Session.ControlChannel.GetPassiveDataStream(dir); try { if (dir == TransferDirection.Download) { Session.ControlChannel.RETR(m_name); } else { Session.ControlChannel.STOR(m_name); } } catch { stream.Close(); throw; } return(stream); }
/// <summary> /// Creates a new zero-length remote file in directory. /// </summary> /// <param name="newFileName">New remote file name.</param> /// <returns>File reference to new zero-length remote file.</returns> public FtpFile CreateFile(string newFileName) { FtpDataStream stream = CreateFileStream(newFileName); stream.Close(); return(m_files[newFileName]); }
internal Queue List(bool passive) { const string errorMsgListing = "Error when listing server directory."; try { Type(TransferMode.Ascii); Queue lineQueue = new Queue(); using (FtpDataStream dataStream = GetDataStream()) using (StreamReader lineReader = new StreamReader(dataStream, Encoding.Default, true, 1024, true)) { Command("LIST"); if (m_lastResponse.Code != FtpResponse.DataChannelOpenedTransferStart && m_lastResponse.Code != FtpResponse.FileOkBeginOpenDataChannel) { dataStream.Close(true); throw new FtpCommandException(errorMsgListing, m_lastResponse); } string line = lineReader.ReadLine(); while ((object)line != null) { lineQueue.Enqueue(line); line = lineReader.ReadLine(); } } if (m_lastResponse.Code != FtpResponse.ClosingDataChannel) { throw new FtpCommandException(errorMsgListing, m_lastResponse); } return(lineQueue); } catch (IOException ie) { throw new Exception(errorMsgListing, ie); } catch (SocketException se) { throw new Exception(errorMsgListing, se); } }
/// <summary> /// Creates a new data stream for remote file in directory. /// </summary> /// <param name="newFileName">New remote file name.</param> /// <returns>Output data stream for new remote file.</returns> public FtpOutputDataStream CreateFileStream(string newFileName) { InitHashtable(); FtpDataStream stream = m_session.ControlChannel.GetPassiveDataStream(TransferDirection.Upload); try { m_session.ControlChannel.STOR(newFileName); FtpFile newFile = new FtpFile(this, newFileName); m_files[newFileName] = newFile; return((FtpOutputDataStream)stream); } catch { stream.Close(); throw; } }