我正在阅读Microsoft考试70-483“用C#编程”的示例考题。
有一个问题我不明白,也无法在互联网上找到有关该主题的任何内容。
问题是:
您正在实现一个名为ProcessFile的方法,该方法从Web服务器和FTP服务器检索数据文件。 ProcessFile()方法具有以下方法签名:
Public void ProcessFile(Guid dataField,string dataFileUri)
每次调用ProcessFile()方法时,它都必须检索唯一的数据文件,然后将数据文件保存到磁盘。
你需要完成的实施 ProcessFile()方法。你应该使用哪个代码段?
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());
}
根据提问人的说法,使用“WebRequest”的后一个片段是正确的。但我无法弄清楚为什么“FileWebRequest”不是。
请记住,我在做的问题在过去经常出错,所以也许这也不正确?
答案 0 :(得分:2)
几个小时前,我也遇到了这个问题。早期我还没有解决这个问题,但是通过在Google中搜索信息,我得出以下结论:
有问题的主要关键词是来自Web服务器和FTP服务器,
这意味着 dataFileUri 可能类似于http://mywebserver或ftp://myftpserver
当您尝试从ftp服务器获取文件时,例如:
//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将具有类型为SystemNet.FtpWebRequest的请求值。 request2将为空。
类似的行为是当您尝试使用http://mywebserver时:request2,request3将为 null 。
使用WebRequest时,传输协议会自动检测请求的类型
因此您无需考虑文件是否存储在Web服务器/文件服务器/ ftp服务器上