C#实现稳定的ftp下载文件方法

当使用C#实现稳定的FTP下载文件的方法时,我们可以使用FtpWebRequest类来执行FTP操作,并根据需要添加错误处理和重试机制。下面是一个示例代码:

cs 复制代码
using System;
using System.IO;
using System.Net;

public class FTPDownloader
{
    private const int MaxRetries = 3; // 最大重试次数

    public bool DownloadFile(string ftpServer, string ftpUsername, string ftpPassword, string remoteFilePath, string localFilePath)
    {
        try
        {
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create($"{ftpServer}/{remoteFilePath}");
            ftpRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
            ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;

            using (FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse())
            using (Stream stream = ftpResponse.GetResponseStream())
            using (FileStream fileStream = File.Create(localFilePath))
            {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fileStream.Write(buffer, 0, bytesRead);
                }
            }

            Console.WriteLine($"Download succeeded: {remoteFilePath}");
            return true;
        }
        catch (Exception ex)
        {
            // 处理异常
            Console.WriteLine($"Error: {ex.Message}");
            return false;
        }
    }

    public bool DownloadFileWithRetry(string ftpServer, string ftpUsername, string ftpPassword, string remoteFilePath, string localFilePath)
    {
        int retries = 0;
        bool success = false;
        while (retries < MaxRetries && !success)
        {
            success = DownloadFile(ftpServer, ftpUsername, ftpPassword, remoteFilePath, localFilePath);
            retries++;
            if (!success)
            {
                Console.WriteLine("Download failed. Retrying...");
            }
        }

        return success;
    }
}

使用实例:

cs 复制代码
string ftpServer = "ftp://example.com"; // FTP服务器地址
string ftpUsername = "username"; // FTP用户名
string ftpPassword = "password"; // FTP密码
string remoteFilePath = "file.txt"; // 远程文件路径
string localFilePath = "C:\\Download\\file.txt"; // 本地保存路径

FTPDownloader ftpDownloader = new FTPDownloader();
bool success = ftpDownloader.DownloadFileWithRetry(ftpServer, ftpUsername, ftpPassword, remoteFilePath, localFilePath);
if (success)
{
    Console.WriteLine("File downloaded successfully.");
}
else
{
    Console.WriteLine("Failed to download the file.");
}

在上述示例中,我们首先通过DownloadFile方法执行FTP下载操作,并将远程文件保存到本地文件路径。如果下载失败,则在DownloadFileWithRetry方法中进行最大重试次数的尝试,直到达到最大重试次数或下载成功为止。根据下载结果,可以在主程序中相应地处理成功或失败的情况。

相关推荐
阿珊和她的猫26 分钟前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234173 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~3 小时前
C#---StopWatch类
开发语言·c#
lifallen5 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研5 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO6 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试7 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑7 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
一阵没来由的风7 小时前
拒绝造轮子(C#篇)ZLG CAN卡驱动封装应用
c#·can·封装·zlg·基础封装·轮子
CHEN5_027 小时前
【Java基础面试题】Java基础概念
java·开发语言