How To Download a File From FTP Using C#

FTP (File transfer protocol) is a common method of storing and transferring files over the internet. Consuming a file from an FTP in C# is a very easy process and is something you may frequently find yourself needing to perform when dealing with online file transfers.

The .NET Framework has built-in libraries to handle the downloading of files from FTP. You can, of course, use any third-party libraries from NuGet if you with, but you can achieve this without them.

The code snippet below will show you how do download a file from an FTP server using C#.

string ftpFilePath = "";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpFilePath);
request.Method = WebRequestMethods.Ftp.DownloadFile;

request.Credentials = new NetworkCredential("username", "password");

string fileContents = null;
	using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())

		Stream responseStream = response.GetResponseStream();
		using (StreamReader reader = new StreamReader(responseStream))
			fileContents = reader.ReadToEnd();
catch(Exception e)
	//handle the error

The basic stricture of the code involves creating and executing the request. The data can then be read using a StreamReader. The flexibility of this object will allow you to do lots of things with the response. You can write the stream anywhere. For this example, I have written it to a standard string. You may change this depending on the data format.

Downloading From FTP Efficiently

When dealing with code like this, I always aim for two things. Clean code with minimal lines while also remaining performant and easy to read. Using statements in C# is very useful for ticking all boxes. You will see the code above makes use of these.

If you are unsure what these blocks do, the quick summary is they close the reader and dispose of the objects automatically. Once the reader breaks out of the using block, the reader is closed and disposed of automatically. This keeps the code clean, reduces lines used and ensures the object is disposed of to free up memory.