优秀的编程知识分享平台

网站首页 > 技术文章 正文

C# 实现文件下载的断点续传(c#中断点失效)

nanyue 2024-10-11 13:33:55 技术文章 6 ℃

#首发创作赛#

在C#中可以使用HttpWebRequest类来发送HTTP请求,并设置相关的属性,如URL、请求范围和文件保存路径,实现文件下载的断点续传。

以下示例演示使用HttpWebRequest类来实现文件下载的断点续传:

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

class Program
{
    static void Main()
    {
        string fileUrl = "文件的URL";
        string savePath = "保存文件的路径";
        string tempPath = savePath + ".tmp";

        // 检查是否存在临时文件
        if (File.Exists(tempPath))
        {
            // 获取临时文件的大小
            long tempFileSize = new FileInfo(tempPath).Length;

            // 设置请求范围
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl);
            request.AddRange(tempFileSize);

            // 发送HTTP请求并获取响应
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                // 打开临时文件以追加数据
                using (FileStream fileStream = new FileStream(tempPath, FileMode.Append))
                {
                    // 从响应流中读取数据并写入临时文件
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        byte[] buffer = new byte[4096];
                        int bytesRead;
                        while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            fileStream.Write(buffer, 0, bytesRead);
                        }
                    }
                }
            }
        }
        else
        {
            // 创建新的文件并下载整个文件
            using (WebClient client = new WebClient())
            {
                client.DownloadFile(fileUrl, tempPath);
            }
        }

        // 下载完成后将临时文件重命名为最终文件
        File.Move(tempPath, savePath);

        Console.WriteLine("文件下载完成!");
    }
}

首先检查是否存在临时文件。如果存在临时文件,则设置HTTP请求的范围,以便从上次下载的位置继续下载。

然后发送HTTP请求并将响应流中的数据写入临时文件。如果不存在临时文件,则直接下载整个文件。

最后将临时文件重命名为最终文件。

上述代码只是一个简单的示例,还可以根据需要添加其他功能,如进度跟踪、错误处理和日志记录。

最近发表
标签列表