/// <summary> /// Set the type of transfer /// </summary> /// <param name="_type">The transfer type</param> /// <returns>Returns a list of FTPResponseMessages</returns> private List <FTPResponseMessage> setTransferType(FTP.TransferModeType _type) { // Initializatoin ArrayList tempMessageList = new ArrayList(); List <FTPResponseMessage> responseMessages = new List <FTPResponseMessage>(); // lock the tcpClient this.lockTcpClient(); switch (_type) { case FTP.TransferModeType.ASCII: // set transferType to ASCII responseMessages = this.sendCommand(FTPCommand.REPRESENTATION_TYPE, FTP.TransferModeTypeASCII); break; case FTP.TransferModeType.BINARY: // set transferType fo BINARY responseMessages = this.sendCommand(FTPCommand.REPRESENTATION_TYPE, FTP.TransferModeTypeBinary); break; default: // unlock the tcpClient this.unlockTcpClient(); // return a empty list return(responseMessages); } if (responseMessages == null) { return(null); } if (responseMessages.Count == 0) { // unlock the tcpClient this.unlockTcpClient(); // return a empty list return(responseMessages); } if (responseMessages[0].ResponseCode != FTPServerResponseCode.CommandOK) { throw new Exception((String)tempMessageList[0]); } // unlock the tcpClient unlockTcpClient(); // return the list of responseMessages return(responseMessages); }
/// <summary> /// Initializes a new ftp Client /// </summary> public FTPClient() { this.Server = String.Empty; this.Port = FTP.DEFAULT_CONTROL_PORT; this.User = String.Empty; this.Password = String.Empty; this.ConnectTimeout = PropertyManager.Property_FTP.InactiveTimeout; this.TransferTimeout = PropertyManager.Property_FTP.TransferTimeout; this.RecieveTimeout = PropertyManager.Property_FTP.RecieveTimeout; this.ConnectionMode = PropertyManager.Property_FTP.Connection_Mode; this.TransferMode = PropertyManager.Property_FTP.Transfer_Mode; this.TransferModeType = FTP.TransferModeType.ASCII; this.AddressFamily = AddressFamily.InterNetwork; this.Encoding = Encoding.GetEncoding(PropertyManager.Property_FTP.EncodingCodePage); this.tcpClient = new TcpClient(); this.BlockSize = PropertyManager.Property_FTP.BlockSize; this.controlIPEndPoint = null; this.isConnected = false; this.isTransfering = false; }
public Int64 Download(String _remoteFile, FTP.TransferModeType _transferModeType) { String localFilePath = String.Format("{0}{1}", PropertyManager.Property_FTP.DownloadCachePath, _remoteFile ); return(this.Download(_remoteFile, localFilePath, _transferModeType)); }
public Int64 Download(String _remoteFile, String _localFile, FTP.TransferModeType _transferModeType) { FileStream fileStream = new FileStream(_localFile, FileMode.Create); TcpListener listner = null; TcpClient client = null; NetworkStream networkStream = null; List <FTPResponseMessage> responseMessages = new List <FTPResponseMessage>(); Byte[] buffer = new Byte[this.BlockSize]; Int32 bytes = new Int32(); Int64 totalBytes = new Int32(); this.lockTcpClient(); this.setTransferType(_transferModeType); if (this.ConnectionMode == FTP.ConnectionMode.ACTIVE) { listner = this.createDataListner(); listner.Start(); } else { client = this.createDataClient(); } responseMessages = this.sendCommand(FTPCommand.RETRIEVE, _remoteFile); if (responseMessages[0].ResponseCode != FTPServerResponseCode.OpenedNewConnection && responseMessages[0].ResponseCode != FTPServerResponseCode.DataConnectionAlreadyOpen ) { throw new Exception(responseMessages[0].Message); } if (this.ConnectionMode == FTP.ConnectionMode.ACTIVE) { client = listner.AcceptTcpClient(); } networkStream = client.GetStream(); do { bytes = (Int32)networkStream.Read(buffer, 0, this.BlockSize); totalBytes += bytes; fileStream.Write(buffer, 0, bytes); }while (bytes != 0); networkStream.Close(); client.Close(); if (this.ConnectionMode == FTP.ConnectionMode.ACTIVE) { listner.Stop(); } FTPResponseMessage errorMessage; if (responseMessages.Count == 1) { responseMessages = this.readResponse(); errorMessage = responseMessages[0]; } else { errorMessage = responseMessages[1]; } if (errorMessage.ResponseCode != FTPServerResponseCode.DataConnectionClosing) { throw new Exception(errorMessage.Message); } fileStream.Close(); this.unlockTcpClient(); return(totalBytes); }
public Int64 Upload(String _localfile, FTP.TransferModeType _transferModeType) { return(this.Upload(_localfile, Path.GetFileName(_localfile), _transferModeType)); }