Here is a quick snippet for FTP services using standard C#/.NET libraries.
The task is to download a file from a remote FTP server using standard C#/.NET libraries.
I assume that you have the FTP server details (Host, Username, Password).
The code is pretty straight forward, I have given comments where required.
/* FTPService.cs */
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace MyProject
{
public class FTPService
{
//request object
private FtpWebRequest ftpRequest = null;
//response object
private FtpWebResponse ftpResponse = null;
//stream object to read
private Stream ftpStream = null;
//Host address like ftp://something.net/
public string Host { get; set; }
//ftp username
public string Username { get; set; }
//ftp password
public string Password { get; set; }
//local directory where the file will be downloaded.
public string LocaDirectory { get; set; }
public void GetFile(string fileName)
{
try
{
//create FTP request
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(String.Format("{0}/{1}", Host, fileName));
//add authentication details
ftpRequest.Credentials = new NetworkCredential(Username, Password);
//set ftp options
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
// Get response from ftp server
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpStream = ftpResponse.GetResponseStream();
StreamReader reader = new StreamReader(ftpStream);
//download the file and copy it to local directory
using (var file = File.Create(LocaDirectory + fileName))
{
ftpStream.CopyTo(file);
}
}
catch (Exception ex)
{
LogError(ex);
}
finally
{
ftpStream.Close();
ftpResponse.Close();
ftpRequest = null;
}
}
}
}
Then you can call this service in your project using the following snippet
private static void DownlaodFTPFile()
{
FTPService service = new FTPService();
service.Host = ConfigurationManager.AppSettings["Host"];
service.Username = ConfigurationManager.AppSettings["Username"];
service.Password = ConfigurationManager.AppSettings["Password"];
service.LocaDirectory = ConfigurationManager.AppSettings["LocalDirectory"];
string fileName = "DownloadFile.txt";
service.GetFile(fileName);
}
Always best practise to use web.config/app.config for hard-coded details, it takes time but it in long run it eventually pays off
Thanks!