Download a File Using FTP




Download a File Using FTP

Problem

You want to programmatically download files using the File Transfer Protocol (FTP).

Solution

Use the System.Net.FtpWebRequest class to download the files. FtpWebRequests are created from the WebRequest class Create method by specifying the URI for the FTP download. In the example that follows, the source code from the first edition of the C# Cookbook is the target for the download. A FileStream is opened for the target and then is wrapped by a BinaryWriter. A BinaryReader is created with the response stream from the FtpWebRequest. Then the stream is read and the target is written until the entire file has been downloaded. This series of operations is demonstrated in Figure.

Using the System.Net.FtpWebRequest class

// Go get the same code from edition 1
FtpWebRequest request =
    (FtpWebRequest)WebRequest.Create(
    "ftp://ftp.oreilly.com/pub/examples/csharpckbk/CSharpCookbook.zip");

request.Credentials = new NetworkCredential("anonymous", "hilyard@oreilly.com");
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
    Stream data = response.GetResponseStream();
    string targetPath = "CSharpCookbook.zip";
    if (File.Exists(targetPath))
        File.Delete(targetPath);

    byte[] byteBuffer = new byte[4096];
    using (FileStream output = new FileStream(targetPath, FileMode.CreateNew))
    {
        int bytesRead = 0;
        do
        {
            bytesRead = data.Read(byteBuffer, 0, byteBuffer.Length);
            if (bytesRead > 0)
            {
                output.Write(byteBuffer, 0, bytesRead);
            }
        }
        while (bytesRead > 0);
    }
}

Discussion

The File Transfer Protocol (FTP) is defined in RFC 959 and is one of the main ways files are distributed over the Internet. The port number for FTP is usually 21. Happily, you don't have to really know much about how FTP works in order to use it. This could be useful to your applications in automatic download of information from a dedicated FTP site or in providing automatic update capabilities.

See Also

See the "FtpWebRequest Class," "FtpWebResponse Class," "WebRequest Class," and "WebResponse Class" topics in the MSDN documentation.