Download
The most trivial way to upload a binary file to an FTP server using the .NET framework is WebClient.UploadFile :
WebClient client = new WebClient(); client.Credentials = new NetworkCredential("username", "password"); client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", @"C:\local\path\file.zip");
If you need stronger control, WebClient does not offer (for example, TLS / SSL encryption, etc.), use FtpWebRequest . An easy way is to simply copy the FileStream stream to FTP using Stream.CopyTo :
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip"); request.Credentials = new NetworkCredential("username", "password"); request.Method = WebRequestMethods.Ftp.UploadFile; using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip")) using (Stream ftpStream = request.GetRequestStream()) { fileStream.CopyTo(ftpStream); }
If you need to track the progress of the download, you need to copy the contents of the pieces themselves:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip"); request.Credentials = new NetworkCredential("username", "password"); request.Method = WebRequestMethods.Ftp.UploadFile; using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip")) using (Stream ftpStream = request.GetRequestStream()) { byte[] buffer = new byte[10240]; int read; while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0) { ftpStream.Write(buffer, 0, read); Console.WriteLine("Uploaded {0} bytes", fileStream.Position); } }
To achieve the GUI (WinForms ProgressBar ) see:
How to show a progress bar to download using FtpWebRequest
If you want to download all files from a folder, see Download a file directory using WebClient .
Download
The most trivial way to download a binary file from an FTP server using the .NET framework is using WebClient.DownloadFile :
WebClient client = new WebClient(); client.Credentials = new NetworkCredential("username", "password"); client.DownloadFile( "ftp://ftp.example.com/remote/path/file.zip", @"C:\local\path\file.zip");
If you need stronger control, WebClient does not offer (for example, TLS / SSL encryption, etc.), use FtpWebRequest . Easily copy an FTP response stream to a FileStream using Stream.CopyTo :
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip"); request.Credentials = new NetworkCredential("username", "password"); request.Method = WebRequestMethods.Ftp.DownloadFile; using (Stream ftpStream = request.GetResponse().GetResponseStream()) using (Stream fileStream = File.Create(@"C:\local\path\file.zip")) { ftpStream.CopyTo(fileStream); }
If you need to track the progress of the download, you need to copy the contents of the pieces themselves:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip"); request.Credentials = new NetworkCredential("username", "password"); request.Method = WebRequestMethods.Ftp.DownloadFile; using (Stream ftpStream = request.GetResponse().GetResponseStream()) using (Stream fileStream = File.Create(@"C:\local\path\file.zip")) { byte[] buffer = new byte[10240]; int read; while ((read = ftpStream.Read(buffer, 0, buffer.Length)) > 0) { fileStream.Write(buffer, 0, read); Console.WriteLine("Downloaded {0} bytes", fileStream.Position); } }
To achieve the GUI (WinForms ProgressBar ) see:
FtpWebRequest FTP Upload Using ProgressBar
If you want to download all files from a remote folder, see
C # Uploading all files and subdirectories via FTP .