/// <summary>
		/// Upload one file from local to remote.
		/// </summary>
		/// <param name="request"></param>
		/// <remarks>
		/// The remote directories are not created before uploading files.
		/// </remarks>
		public void Upload(FileTransferRequest request)
		{
			try
			{
				using (var webClient = new WebClient())
				{
					if (!string.IsNullOrEmpty(_userId) && !string.IsNullOrEmpty(_password))
						webClient.Credentials = new NetworkCredential(_userId, _password);

					webClient.UploadFile(request.RemoteFile, request.LocalFile);
				}
			}
			catch (Exception e)
			{
				//TODO (cr Oct 2009): we're not supposed to use SR for exception messages.
				//Throw a different type of exception and use an ExceptionHandler if it's supposed to be a user message.
				var message = string.Format(SR.ExceptionFailedToTransferFile, request.RemoteFile, request.LocalFile);
				throw new Exception(message, e);
			}
		}
		/// <summary>
		/// Upload one file from local to remote.
		/// </summary>
		/// <param name="request"></param>
		public void Upload(FileTransferRequest request)
		{
			try
			{
				CreateRemoteDirectoryForFile(request.RemoteFile);

				// upload the file
				var credentials = new NetworkCredential(_userId, _password);
				using (var ftpClient = new FtpClient {UsePassiveMode = _usePassive, Credentials = credentials})
				{
					ftpClient.UploadFile(request.RemoteFile, request.LocalFile);
				}
			}
			catch (Exception e)
			{
				//TODO (cr Oct 2009): we're not supposed to use SR for exception messages.
				//Throw a different type of exception and use an ExceptionHandler if it's supposed to be a user message.
				var message = string.Format(SR.ExceptionFailedToTransferFile, request.LocalFile, request.RemoteFile);
				throw new Exception(message, e);
			}
		}
		/// <summary>
		/// Download one file from remote to local
		/// </summary>
		/// <param name="request"></param>
		public void Download(FileTransferRequest request)
		{
			try
			{
				// Create download directory if not already exist
				var downloadDirectory = Path.GetDirectoryName(request.LocalFile);
				if (!Directory.Exists(downloadDirectory))
					Directory.CreateDirectory(downloadDirectory);

				// download the file
				var credentials = new NetworkCredential(_userId, _password);
				using (var ftpClient = new FtpClient {UsePassiveMode = _usePassive, Credentials = credentials})
				{
					ftpClient.DownloadFile(request.RemoteFile, request.LocalFile);
				}
			}
			catch (Exception e)
			{
				//TODO (cr Oct 2009): we're not supposed to use SR for exception messages.
				//Throw a different type of exception and use an ExceptionHandler if it's supposed to be a user message.
				var message = string.Format(SR.ExceptionFailedToTransferFile, request.RemoteFile, request.LocalFile);
				throw new Exception(message, e);
			}
		}