WindowsDevCenter.com
oreilly.comSafari Books Online.Conferences.

advertisement


AddThis Social Bookmark Button

Building FTP Services Using .NET 2.0
Pages: 1, 2

Uploading a Text File

To upload a text file to an FTP server:



  1. Create an instance of the FtpWebRequest class using the Create() method of the WebRequest class. The Create() method takes in a URI parameter (containing the path for the file to be uploaded).
  2. Set the command to be sent to the FTP server using the Method property of the FtpWebRequest class; in this case this command is UploadFile.
  3. Specify the login credential to the FTP server.
  4. Use a StreamReader object to read the contents of the text file to be uploaded.
  5. Retrieve the stream used to upload data to an FTP server using the GetRequestStream() method of the FtpWebRequest class.
  6. Write the content of the text file to be uploaded into the stream.
  7. Obtain the response from the FTP server using the GetResponse() method from the FtpWebRequest class.
Try
    Dim filename As String = ftpURI & "test.txt"
    Dim ftpReq As FtpWebRequest = WebRequest.Create(filename)
    ftpReq.Method = WebRequestMethods.Ftp.UploadFile
    ftpReq.Credentials = New NetworkCredential("anonymous", "password")

    Dim stream As StreamReader = New StreamReader("C:\test.txt")
    Dim b() As Byte = _
       System.Text.Encoding.UTF8.GetBytes(stream.ReadToEnd())
    stream.Close()

    ftpReq.ContentLength = b.Length
    Dim s As Stream = ftpReq.GetRequestStream()
    s.Write(b, 0, b.Length)
    s.Close()

    Dim ftpResp As FtpWebResponse = ftpReq.GetResponse()
    MsgBox(ftpResp.StatusDescription)
Catch ex As Exception
    MsgBox(ex.ToString)
End Try

Removing a File

To remove a file from an FTP server:

  1. Create an instance of the FtpWebRequest class using the Create() method of the WebRequest class. The Create() method takes in a URI parameter (containing the path for the file to be removed).
  2. Set the command to be sent to the FTP server using the Method property of the FtpWebRequest class; in this case this command is DeleteFile.
  3. Specify the login credential to the FTP server.
  4. Obtain the response from the FTP server using the GetResponse() method from the FtpWebRequest class.
Try
    Dim filename As String = ftpURI & "PING.bmp"
    Dim ftpReq As FtpWebRequest = WebRequest.Create(filename)
    ftpReq.Method = WebRequestMethods.Ftp.DeleteFile
    ftpReq.Credentials = New NetworkCredential("anonymous", "password")

    Dim ftpResp As FtpWebResponse = ftpReq.GetResponse
    MsgBox(ftpResp.StatusDescription)
Catch ex As Exception
    MsgBox(ex.ToString)
End Try

Making a New Directory

To create a new directory on an FTP server:

  1. Create an instance of the FtpWebRequest class using the Create() method of the WebRequest class. The Create() method takes in a URI parameter (containing the path of the new directory to create).
  2. Set the command to be sent to the FTP server using the Method property of the FtpWebRequest class; in this case this command is MakeDirectory.
  3. Specify the login credential to the FTP server.
  4. Obtain the response from the FTP server using the GetResponse() method from the FtpWebRequest class.
Try
    Dim filename As String = ftpURI & "User1"
    Dim ftpReq As FtpWebRequest = WebRequest.Create(filename)
    ftpReq.Method = WebRequestMethods.Ftp.MakeDirectory
    ftpReq.Credentials = New NetworkCredential("anonymous", "password")

    Dim ftpResp As FtpWebResponse = ftpReq.GetResponse
    MsgBox(ftpResp.StatusDescription)
Catch ex As Exception
    MsgBox(ex.ToString)
End Try

Figure 3 shows the contents of my FTP directory after creating the new directory User1.

Figure 3
Figure 3. The contents of my FTP directory after making a new directory

Viewing Directory Listing

To view the directory listing of an FTP account:

  1. Create an instance of the FtpWebRequest class using the Create() method of the WebRequest class. The Create() method takes in a URI parameter (containing the full FTP path).
  2. Set the command to be sent to the FTP server using the Method property of the FtpWebRequest class; in this case this command is ListDirectoryDetails.
  3. Specify the login credential to the FTP server.
  4. Obtain the response from the FTP server using the GetResponse() method from the FtpWebRequest class.
  5. Retrieve the stream that contains response data sent from an FTP server using the GetResponseStream() method from the FtpWebResponse class.

Note that you can use a StreamReader object to read the directory listing.

Try
    Dim ftpReq As FtpWebRequest = WebRequest.Create(ftpURI)
    ftpReq.Method = WebRequestMethods.Ftp.ListDirectoryDetails
    ftpReq.Credentials = New NetworkCredential("anonymous", "password")

    Dim FTPResp As FtpWebResponse = ftpReq.GetResponse
    Dim ftpRespStream As Stream = FTPResp.GetResponseStream

    Dim reader As StreamReader
    reader = New StreamReader(ftpRespStream, System.Text.Encoding.UTF8)
    Console.WriteLine(reader.ReadToEnd)
Catch ex As Exception
    MsgBox(ex.ToString)
End Try

Depending on how the FTP server is configured, you will see something like this:

(MS-DOS Directory Listing Style)
10-19-06  11:14AM                19387 phidgetRFID.jpg
12-08-06  02:01PM               242490 PING.bmp
12-08-06  10:32AM                    5 test.txt
12-08-06  02:26PM       <DIR>          User1

or:

(UNIX Directory Listing Style)
-r-xr-xr-x   1 owner    group           19387 Oct 19 11:14 phidgetRFID.jpg
-rwxrwxrwx   1 owner    group          242490 Dec  8 14:01 PING.bmp
-r-xr-xr-x   1 owner    group               5 Dec  8 10:32 test.txt
drwxrwxrwx   1 owner    group               0 Dec  8 14:26 User1

Note that you need to manually parse the directory listing to differentiate the directories from the files. The FTP classes in .NET 2.0 does not provision for this.

Removing a Directory

To remove a directory on an FTP server:

  1. Create an instance of the FtpWebRequest class using the Create() method of the WebRequest class. The Create() method takes in a URI parameter (containing the path of the new directory to remove).
  2. Set the command to be sent to the FTP server using the Method property of the FtpWebRequest class; in this case this command is RemoveDirectory.
  3. Specify the login credential to the FTP server.
  4. Obtain the response from the FTP server using the GetResponse() method from the FtpWebRequest class.
Try
    Dim filename As String = ftpURI & "User1"
    Dim ftpReq As FtpWebRequest = WebRequest.Create(filename)
    ftpReq.Method = WebRequestMethods.Ftp.RemoveDirectory
    ftpReq.Credentials = New NetworkCredential("anonymous", "password")

    Dim ftpResp As FtpWebResponse = ftpReq.GetResponse
    MsgBox(ftpResp.StatusDescription)
Catch ex As Exception
    MsgBox(ex.ToString)
End Try

Summary

While the new FTP classes in .NET 2.0 make transferring files between clients and FTP servers easy, they does have their shortcomings. For example, you need to maintain your own state, as each request requires a full valid path. This is evident if you try to implement a full-blown FTP client that allows users to navigate directories. In this case, you need to know exactly which directory the user is in before you can get a listing of files in that particular directory (since the FTP classes do not remember the current directory). However, if all you need is access to an FTP server for simple file transfer, the new managed classes in .NET 2.0 are worth a look.

Wei-Meng Lee (Microsoft MVP) http://weimenglee.blogspot.com is a technologist and founder of Developer Learning Solutions http://www.developerlearningsolutions.com, a technology company specializing in hands-on training on the latest Microsoft technologies.


Return to the Windows DevCenter.