c#文件下载示例的4种方法分享


在C#中,文件下载可以通过多种方式实现,具体取决于你的应用场景,比如是从网络下载文件到本地,还是从本地文件系统的一个位置复制到另一个位置。不过,通常当我们谈论“文件下载”时,我们指的是从网络(如HTTP服务器)下载文件到本地。以下是四种常见的实现方式:

### 1. 使用`WebClient`类


using System;
using System.Net;

class Program
{
    static void Main()
    {
        using (WebClient client = new WebClient())
        {
            client.DownloadFile("http://example.com/file.zip", @"C:\path\to\save\file.zip");
        }
    }
}

### 2. 使用`HttpClient`类(.NET Framework 4.5+ 或 .NET Core)


using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (HttpClient client = new HttpClient())
        {
            HttpResponseMessage response = await client.GetAsync("http://example.com/file.zip", HttpCompletionOption.ResponseHeadersRead);
            using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
            {
                string filePath = @"C:\path\to\save\file.zip";
                using (Stream streamToWriteTo = File.Open(filePath, FileMode.Create))
                {
                    await streamToReadFrom.CopyToAsync(streamToWriteTo);
                }
            }
        }
    }
}

### 3. 使用`WebRequest`和`WebResponse`(更通用,但较旧)


using System;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        WebRequest request = WebRequest.Create("http://example.com/file.zip");
        using (WebResponse response = request.GetResponse())
        using (Stream responseStream = response.GetResponseStream())
        using (FileStream fileStream = File.Create(@"C:\path\to\save\file.zip"))
        {
            responseStream.CopyTo(fileStream);
        }
    }
}

### 4. 使用第三方库(如`RestSharp`)

虽然这不是.NET自带的,但`RestSharp`是一个流行的HTTP客户端库,可以简化HTTP请求的处理。

首先,你需要通过NuGet安装`RestSharp`。


// 假设你已经安装了RestSharp
using RestSharp;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var client = new RestClient("http://example.com/");
        var request = new RestRequest("file.zip", Method.GET);

        var response = await client.DownloadDataAsync(request);

        File.WriteAllBytes(@"C:\path\to\save\file.zip", response);
    }
}

// 注意:RestSharp的DownloadDataAsync方法直接返回byte[],因此这里我们直接写入文件
// 如果RestSharp版本不支持DownloadDataAsync,你可能需要自定义下载逻辑或使用Stream下载

请注意,`RestSharp`的`DownloadDataAsync`方法可能不是所有版本都直接支持,上述代码是基于一个假设的API方法。实际上,你可能需要使用`ExecuteAsync`或类似方法来获取响应流,并手动处理文件写入。

以上就是在C#中从网络下载文件的四种常见方法。每种方法都有其适用场景,你可以根据自己的需要选择最合适的一种。