Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载的文件不完整/损坏_C#_.net_Download_Httpwebrequest - Fatal编程技术网

C# 下载的文件不完整/损坏

C# 下载的文件不完整/损坏,c#,.net,download,httpwebrequest,C#,.net,Download,Httpwebrequest,我制作了一个小工具,它浏览了一系列图片链接并将它们下载到硬盘上,然而,有些图片是不完整的(),它们甚至不会引发异常。下面的代码显示了我在工具中使用的下载方法 private void Download(string url) { try { HttpWebRequest Request = WebRequest.Create(url) as HttpWebRequest; Request.Method = WebRequestMethods.Htt

我制作了一个小工具,它浏览了一系列图片链接并将它们下载到硬盘上,然而,有些图片是不完整的(),它们甚至不会引发异常。下面的代码显示了我在工具中使用的下载方法

private void Download(string url)
{
    try
    {
        HttpWebRequest Request = WebRequest.Create(url) as HttpWebRequest;
        Request.Method = WebRequestMethods.Http.Get;
        Request.Timeout = 60 * 1000;
        FileInfo ImageFile = new FileInfo(Path.Combine(BaseDirectory, Path.GetFileName(url)));
        if (!ImageFile.Exists)
        {
            using (HttpWebResponse Response = Request.GetResponse() as HttpWebResponse)
            {
                if (Response.StatusCode.Equals(HttpStatusCode.OK))
                {
                    using (FileStream FStream = new FileStream(ImageFile.FullName, FileMode.Create, FileAccess.Write, FileShare.None, 4096))
                        Response.GetResponseStream().CopyTo(FStream, 4096);
                }
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Error Downloading: {0}\r\nMessage: {1}", url, e.Message);
    }
}

我无法确定问题是否出在服务器端,或者我的代码有问题,那么您认为如何?

您在读取数据后是否尝试调用
Flush()
?看起来流的最后一部分没有被写出。

using语句不是应该为我这样做,还是只是关闭文件流?而且,这只是偶尔发生,其他时候下载的图片没有问题,这就是让我困惑的原因!using just调用Dispose(),这会整齐地销毁对象。无法保证流在被破坏之前会被冲洗掉。它起作用的时间可能是由于水流被其他因素冲刷所致。尝试调用Flush()并查看如何获得onOk。我会尝试一下,稍后再报告。似乎这一直都是问题所在。非常感谢,你真的救了我。