'WebRequest vs FileWebRequest

I am going through the example exam questions for Microsoft exam 70-483 "Programming in C#".

There is one question the answer to which I don't understand and couldn't find anything about the topic on the Internet.

The question is:

You are implementing a method named ProcessFile that retrieves data files from web servers and FTP servers. The ProcessFile() method has the following method signature:
Public void ProcessFile(Guid dataField, string dataFileUri)
Each time the ProcessFile() method is called, it must retrieve a unique data file and then save the data file to disk.
You need to complete the implementation of the ProcessFile() method. Which code segment should you use?

FileWebRequest request = FileWebRequest.Create(dataFileUri) as FileWebRequest;
using (FileWebResponse response = request.GetResponse() as FileWebResponse)
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
using (StreamWriter writer = new StreamWriter(dataFieldId + ".dat"))
{
    writer.Write(reader.ReadToEnd());
}

-or-

WebRequest request = WebRequest.Create(dataFileUri);
using (WebResponse response = request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
using (StreamWriter writer = new StreamWriter(dataFieldId + ".dat"))
{
    writer.Write(reader.ReadToEnd());
}

According to the question-making people, the latter snippet, using "WebRequest" is the correct one. But I cannot figure out why the "FileWebRequest" one isn't.
Keep in mind the questions I am doing have been wrong a lot in the past, so maybe this isn't correct, either?



Solution 1:[1]

Some hours ago I also have met this question. Early I have not work with this, but by searching info in Google I concluded followings:

  • the main words in question is from web servers and FTP servers,

    that means that dataFileUri may be like http://mywebserver or ftp://myftpserver

  • when you try to get file from ftp server, for example:

    //from answer
    var request1 = WebRequest.Create("ftp://myftpserver");   
    
    //from answer
    var request2 = FileWebRequest.Create("ftp://myftpserver") as FileWebRequest;   
    
    var request3 = WebRequest.Create("ftp://myftpserver") as FtpWebRequest;
    

    request1, request3 will have request value with type SystemNet.FtpWebRequest. request2 will be null.

    The similar behavior will be when you try to use http://mywebserver: request2, request3 will be null.

  • when you use WebRequest the type of the request will be automatically detected by transfer protocol

    So you don't need to think about whether file stored on web server/file server/ftp server

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1