当前位置: 首页 > news >正文

c#从ftp服务器下载文件读取csv

从 FTP 服务器下载文件的功能,并且支持根据文件名称的前缀或直接文件名进行查找和下载。以下是对代码的一些建议和修改,以确保它能够满足您的需求,尤其是如果您希望仅下载特定类型的文件(例如 .csv 文件)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;namespace Drv.Client
{public partial class FtpClient{private static readonly object lockObject = new object();/// <summary>/// 下载特定前缀或特定文件名的文件(支持筛选文件类型)/// </summary>/// <param name="ftpUrl"></param>/// <param name="username"></param>/// <param name="password"></param>/// <param name="filePrefix"></param>/// <param name="lastModifiedTime"></param>/// <param name="extension">需要下载的文件扩展名(例如 ".csv")</param>/// <returns></returns>public static string DownloadFileFromFtp(string ftpUrl,string username,string password,string filePrefix,ref DateTime lastModifiedTime,string extension = ".csv"){try{lock (lockObject){// 列出文件List<string> files = ListFilesOnFtp(ftpUrl, username, password);foreach (var file in files){// 检查文件名是否以指定前缀和扩展名结尾if (file.StartsWith(filePrefix, StringComparison.OrdinalIgnoreCase) && file.EndsWith(extension, StringComparison.OrdinalIgnoreCase)){string fileUrl = ftpUrl + "/" + file; // 确保文件URL正确FtpWebRequest request = CreateFtpRequest(fileUrl, username, password, WebRequestMethods.Ftp.GetDateTimestamp);// 获取最后修改时间DateTime serverLastModifiedTime;using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()){serverLastModifiedTime = response.LastModified;}// 比较最后修改时间if (serverLastModifiedTime > lastModifiedTime){lastModifiedTime = serverLastModifiedTime;// 下载文件内容request = CreateFtpRequest(fileUrl, username, password, WebRequestMethods.Ftp.DownloadFile);using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())using (Stream responseStream = response.GetResponseStream())using (StreamReader reader = new StreamReader(responseStream)){return reader.ReadToEnd(); // 读取并返回文件内容}}else{_logger.LogInfo($"The file {file} is not modified since the last download.");}}}return string.Empty; // 如果没有文件符合条件}}catch (WebException ex){// 处理 FTP 相关的异常if (ex.Response is FtpWebResponse ftpResponse){_logger.LogError($"FTP Error: {ftpResponse.StatusDescription}");}else{_logger.LogError($"Network Error: {ex.Message}");}return string.Empty;}}private static List<string> ListFilesOnFtp(string ftpUrl, string username, string password){List<string> fileList = new List<string>();FtpWebRequest request = CreateFtpRequest(ftpUrl, username, password, WebRequestMethods.Ftp.ListDirectory);using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())using (Stream responseStream = response.GetResponseStream())using (StreamReader reader = new StreamReader(responseStream)){while (!reader.EndOfStream){fileList.Add(reader.ReadLine());}}return fileList;}private static FtpWebRequest CreateFtpRequest(string ftpUrl, string username, string password, string method){FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);request.Method = method;if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)){request.Credentials = new NetworkCredential(username, password);}return request;}}
}


文章转载自:

http://tw4BbzTq.chmcq.cn
http://aVAJD5SF.chmcq.cn
http://dSLVuJUD.chmcq.cn
http://i1olykPx.chmcq.cn
http://ZzooEawQ.chmcq.cn
http://m1Y5wIi3.chmcq.cn
http://HXD9xagH.chmcq.cn
http://ibIf868Q.chmcq.cn
http://RJ4ZwQPM.chmcq.cn
http://WOXNbKVK.chmcq.cn
http://wJj8Sl1R.chmcq.cn
http://8wUUdY9G.chmcq.cn
http://rlmYHyhu.chmcq.cn
http://DHDCeOvX.chmcq.cn
http://ipAf7UcK.chmcq.cn
http://pK5aJVBc.chmcq.cn
http://WC7Umi1t.chmcq.cn
http://W92b6SzM.chmcq.cn
http://ccCTgviG.chmcq.cn
http://NiRoHriD.chmcq.cn
http://WjbyUrIk.chmcq.cn
http://WMgih2Hv.chmcq.cn
http://j547pXIf.chmcq.cn
http://EJrrlETd.chmcq.cn
http://i5Klor19.chmcq.cn
http://bbs5xgke.chmcq.cn
http://LQxno59W.chmcq.cn
http://f04IojIC.chmcq.cn
http://GFoY8iZf.chmcq.cn
http://m0dm1vYl.chmcq.cn
http://www.dtcms.com/a/136876.html

相关文章:

  • 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具
  • 小目标、狭长目标检测的一些优化方法
  • RK3588 Buildroot 串口测试工具
  • es6面试常见问题╮(╯▽╰)╭
  • 【C++】Stack和Queue的底层封装和实现
  • 分享一下这几天在公司学到的东西
  • python学习 -- 综合案例1:设计一款基于python的飞机大战小游戏
  • 阿里云 AI 搜索开放平台新功能发布:大模型联网能力上线
  • java面试篇 4.9
  • 案例驱动的 IT 团队管理:创新与突破之路:第五章 创新管理:从机制设计到文化养成-5.1 创新激励体系-5.1.3失败案例的价值转化机制
  • Linux笔记---动静态库(原理篇)
  • java实现二叉树的前序、中序、后序遍历(递归和非递归方式)以及层级遍历
  • Windows10系统RabbitMQ无法访问Web端界面
  • MongoDB 分账号限制数据访问
  • Stable Diffusion LoRA模型加载实现风格自由
  • 精准狙击消费者?亚马逊新受众定向功能深度测评
  • Denoising Diffusion Probabilistic Models---解析
  • virtuoso 保存PDK model过程参数方法
  • 4. k8s核心概念 pod deployment service
  • AI工具箱源码+成品网站源码+springboot+vue
  • Python基础总结(五)之字典
  • CUDA的安装
  • 多个定时器同时工作时,会出现哪些常见的bug ,如何解决??(定时任务未实时更新但刷新后正常的问题分析)
  • 数据结构和算法(七)--树
  • WPF 依赖注入启动的问题
  • shell编程之正则表达式
  • 关于Newtonsoft.Json
  • 电动硬密封耐磨球阀:工业流体控制的革新之选-耀圣
  • 碰一碰发视频源码搭建:碰一碰贴牌。碰一碰定制化开发
  • 记录一次后台项目的打包优化