C#,如何修改代码以克服文件下载结束时的错误

C#,如何修改代码以克服文件下载结束时的错误,c#,C#,我正在尝试从站点下载zip文件 该文件可通过以下链接获得 “下载.cms.gov/nppes/nppes_数据_发布_2017年12月_.zip” 顺便说一句,文件名每个月都会更改。 在发布本文时(2017-12),文件名为 “下载.cms.gov/nppes/nppes_数据_发布_2017年12月_.zip” 我使用了以下C#代码。。效果很好,但最后 它抛出错误并删除目标处的文件 错误消息如下所示: > System.Net.WebException:WebClient请求期间发生异常。--

我正在尝试从站点下载zip文件 该文件可通过以下链接获得 “下载.cms.gov/nppes/nppes_数据_发布_2017年12月_.zip” 顺便说一句,文件名每个月都会更改。 在发布本文时(2017-12),文件名为 “下载.cms.gov/nppes/nppes_数据_发布_2017年12月_.zip”

我使用了以下C#代码。。效果很好,但最后 它抛出错误并删除目标处的文件

错误消息如下所示:

> System.Net.WebException:WebClient请求期间发生异常。-->System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭了现有连接。-->System.Net.Sockets.SocketException:远程主机强制关闭了现有连接 位于System.Net.Sockets.Socket.Receive(字节[]缓冲区、Int32偏移量、Int32大小、SocketFlags和SocketFlags) 位于System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小) ---内部异常堆栈跟踪的结束--- 位于System.Net.ConnectStream.Read(字节[]缓冲区,Int32偏移量,Int32大小) 在System.Net.WebClient.DownloadBitsState.RetrieveBytes(Int32和bytesRetrieved)中 在System.Net.WebClient.DownloadBits(WebRequest请求、流写入流、CompletionDelegate CompletionDelegate、AsyncOperation asyncOp) 位于System.Net.WebClient.DownloadFile(Uri地址,字符串文件名) ---内部异常堆栈跟踪的结束--- 位于System.Net.WebClient.DownloadFile(Uri地址,字符串文件名) 位于System.Net.WebClient.DownloadFile(字符串地址、字符串文件名) 在h:\ITFS2012\IT\CmsNpiFileLoad\CmsNpiFileLoad\Program.cs中的CmsNpiFileLoad.Program.Main(字符串[]args)处:第92行 无法从传输连接读取数据:现有 远程主机已强制关闭连接

这似乎很清楚。远程主机在连接完成之前关闭了连接。你需要知道主持人在做什么才能知道原因


当你说“删除了目的地的文件”时,你确定它曾经存在过吗?简单地抛出异常不会删除文件。

我在一个测试Windows窗体应用程序中运行了这两行代码,它很好地完成了:

System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadFile("http://download.cms.gov/nppes/NPPES_Data_Dissemination_December_2017.zip", @"C:\Users\bluem\Desktop\NPPES_Data_Dissemination_December_2017.zip");

你也可以访问远程终端吗?@Tobiasheel:不太可能,因为那是美国政府的网站。酷!现在你能告诉我(我喜欢看代码)如何检查链接是否已经存在(甚至在你开始下载之前)。原因是链接每个月都在变化。因此,我想首先检查文件是否存在!这可能应该作为一个单独的问题进行研究/提问。如何确定指向文件的http链接是否有效。我想这可能是一个异常处理程序,但考虑到您已经尝试过的代码,这似乎太明显了。我有点困惑,因为我认为我这里的代码与您已经尝试过的代码没有任何不同。BlueMonkMN:我使用了DownloadFileAsync,您使用的是DownLoadFile。由于未知原因,DownloadFileAsync没有给我错误消息。因此,我的下一个问题是如何找到该链接是否已经在页面中(可能使用httpWebRequest?),我需要一些编码方面的帮助
System.Net.WebClient wc = new System.Net.WebClient();
wc.DownloadFile("http://download.cms.gov/nppes/NPPES_Data_Dissemination_December_2017.zip", @"C:\Users\bluem\Desktop\NPPES_Data_Dissemination_December_2017.zip");