首页 > 编程语言 >C# 操作FTP

C# 操作FTP

时间:2023-11-30 15:16:06浏览次数:26  
标签:FTP oracleConnectionString string C# ftpPassword 操作 using line ftpUsername

using System;
using System.IO;
using System.Net;
using FluentFTP;
using Oracle.ManagedDataAccess.Client;
using System.Linq;
using FluentFTP.Helpers;

namespace FtpToOracleConsoleApp
{
class Program
{
static void Main(string[] args)
{
string ftpServerUri = "ftp://888.88.88.88";
string ftpUsername = "a";
string ftpPassword = "b";
string oracleConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=90.32.15.55)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=report)));User Id=sa;Password=abc;";

ProcessDirectory(ftpServerUri, ftpUsername, ftpPassword, oracleConnectionString);
}

static void ProcessDirectory(string directoryUri, string ftpUsername, string ftpPassword, string oracleConnectionString)
{
FtpWebRequest directoryRequest = (FtpWebRequest)WebRequest.Create(directoryUri);
directoryRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
directoryRequest.Credentials = new NetworkCredential(ftpUsername, ftpPassword);

FtpWebResponse directoryResponse = (FtpWebResponse)directoryRequest.GetResponse();
Stream responseStream = directoryResponse.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);

while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (!string.IsNullOrEmpty(line))
{
string name = ParseFileNameFromFtpResponse(line);
bool isDirectory = CheckIfDirectory(line);

if (isDirectory)
{
string newUri = directoryUri.TrimEnd('/') + "/" + name;
ProcessDirectory(newUri, ftpUsername, ftpPassword, oracleConnectionString);
}
else
{
if (!string.IsNullOrEmpty(line) && line.EndsWith(".txt"))
{
DateTime modifiedTime = ParseModifiedTime(line);
//查询24小时内的文件
if ((DateTime.Now - modifiedTime).TotalHours <= 24)
{
var parts = name.Split(new char[] { '_', '[', ']' });

// 提取 prodId (第一部分)
string prodId = parts[0];

// 提取 lotId 并替换其中的 _ 为 #
string lotId = parts[1] + "#" + parts[2].Split(new char[] { 'S' })[1];

// 提取并转换 dieCount
int dieCount = int.Parse(parts[4]);

InsertIntoOracle(oracleConnectionString, prodId, lotId, dieCount);
}
}
}
}
}
reader.Close();
directoryResponse.Close();
}

static bool CheckIfDirectory(string ftpResponseLine)
{
// 根据FTP服务器的响应格式判断是否为目录
// 这是一个简化的示例,可能需要根据实际情况进行调整
return ftpResponseLine.StartsWith("d");
}

static string ParseFileNameFromFtpResponse(string ftpResponseLine)
{
// FTP响应的格式可能因FTP服务器而异,这里是一个通用的解析方法
// 通常文件名是在行的末尾,且前面有一些空格分隔的字段
var parts = ftpResponseLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
return parts[parts.Length - 1];
}

static DateTime ParseModifiedTime(string ftpResponseLine)
{
// 根据FTP服务器的响应格式解析修改时间
// 示例仅作为示意,可能需要调整
var parts = ftpResponseLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
int currentYear = DateTime.Now.Year;
int currentMonth = DateTime.Now.Month;

// 构建完整的日期时间字符串
string fullDateTimeStr = $"{currentYear}-{currentMonth}-{parts[6]} {parts[7]}";

// 定义日期时间的格式
string format = "yyyy-M-dd HH:mm";

if (DateTime.TryParseExact(fullDateTimeStr, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime parsedDateTime))
{
return parsedDateTime;
}
else
{
throw new FormatException("Invalid date time format.");
}
}

static void InsertIntoOracle(string connectionString, string prodId,string lotId, int dieCount)
{
using (OracleConnection conn = new OracleConnection(connectionString))
{
conn.Open();

// 检查记录是否存在
string checkSql = "SELECT dieCount FROM your_table WHERE prodId = :prodId AND lotId = :lotId";
OracleCommand checkCmd = new OracleCommand(checkSql, conn);
checkCmd.Parameters.Add(new OracleParameter("prodId", prodId));
checkCmd.Parameters.Add(new OracleParameter("lotId", lotId));

object result = checkCmd.ExecuteScalar();

if (result != null && result != DBNull.Value)
{
// 记录存在
int existingDieCount = Convert.ToInt32(result);

if (existingDieCount == 0)
{
// dieCount 为空,更新记录
string updateSql = "UPDATE your_table SET dieCount = :dieCount WHERE prodId = :prodId AND lotId = :lotId";
OracleCommand updateCmd = new OracleCommand(updateSql, conn);
updateCmd.Parameters.Add(new OracleParameter("dieCount", dieCount));
updateCmd.Parameters.Add(new OracleParameter("prodId", prodId));
updateCmd.Parameters.Add(new OracleParameter("lotId", lotId));

updateCmd.ExecuteNonQuery();
}
// 如果 dieCount 不为空,则不执行任何操作
}
else
{
// 记录不存在,插入新记录
string insertSql = "INSERT INTO your_table (prodId, lotId, dieCount) VALUES (:prodId, :lotId, :dieCount)";
OracleCommand insertCmd = new OracleCommand(insertSql, conn);
insertCmd.Parameters.Add(new OracleParameter("prodId", prodId));
insertCmd.Parameters.Add(new OracleParameter("lotId", lotId));
insertCmd.Parameters.Add(new OracleParameter("dieCount", dieCount));

insertCmd.ExecuteNonQuery();
}
}
}
}
}

  

标签:FTP,oracleConnectionString,string,C#,ftpPassword,操作,using,line,ftpUsername
From: https://www.cnblogs.com/lhhb/p/17867392.html

相关文章

  • 龙蜥操作系统 升级 openssh
    龙蜥8.8openssh升级步骤1.查看目前openssh版本rpm -qa|grep openssh2.安装rpm包制作需要的工具dnf install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel libXt-devel gtk2-devel make perl -ydnf install imake  -y3.官网下载openssh源码包ht......
  • ntc_template_华为获取端口相关信息
    获取端口下的地址描述vlanarpmac等信息ValuePORT(\S+)ValueIP(\S+)Valuemask(\S+)Valuemac(\S+)Valuevlan(.*)Valuetype(\S+)Valuedescr(.*)Start^.*MAC\s+Address\s+VLAN/VSI/BD\s+Learned-From\s+Type->mac^.*VLAN/CEVLAN->arp^aaa->oth......
  • vulhub中spring的CVE-2018-1273漏洞复现
    ​ 1.影响版本SpringDataCommons1.13-1.13.10(IngallsSR10)SpringDataREST2.6-2.6.10(IngallsSR10)SpringDataCommons2.0to2.0.5(KaySR5)SpringDataREST3.0-3.0.5(KaySR5)2.漏洞原理SpringData是一个用于简化数据库访问,并支持云服务的开源框......
  • Docker-Compose部署Gitlab以及Gitlab配置SMTP邮件服务
    使用Docker-Compose部署Gitlab拉取镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce/tags拉取到镜像后,使用dockertag修改镜像,dockerpush推送到自己的镜像仓库(内网部署)编写docker-compose文件##创建容器挂载出来的文件夹mkdir/gitlab&&cd/gitlabmkdir-pdata/{l......
  • 18_LCD1602
    LCD1602介绍引脚及应用电路原理图内部结构框图存储器结构时序结构LCD1602指令集LCD1602操作流程字符,字符串编写LCD1602代码LCD1602.c#include<REGX52.H>sbitLCD_RS=P2^6;//1数据0指令sbitLCD_RW=P2^5;//1读0写sbitLCD_E=P2^7;//1数据有效,下降......
  • jmeter 分布式压测出现 :java.io.FileNotFoundException: rmi_keystore.jks (系统找不
    分布式执行压测时报错:Exceptioncreatingconnectionto:10.22.133.117;nestedexceptionis:java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件。)解决方案:(执行机和被执行机器的jmeter版本要一致)1、修改jmeter.properties文件(jmeter的安装bin路......
  • 重装vs2022 nuget添加包报错: Unexpected character encountered while parsing value:
    工具--》选项--》Nuget包管理器,点击清除所有Nuget存储 参考文献:关于VSNuGet包无法更新,设置包源映射无效的问题-CSDN博客         微软官方文献 ......
  • ceph 编译时遇到的一些问题
    在用gitsubmoduleupdate--init--recursive--progress下载子模块时,一些子模块加载有问题,包括rook-clinet-python#######################################执行./do_cmake.sh时报错###########################MakeErrorat/usr/share/cmake/Modules/ExternalProject.cmake:......
  • python图像中如何 绘制矩形,编辑文案,保存结果图片等操作
    python版opencv函数学习笔记-cv.rectangle()全参数理解cv2.rectangle(img,pt1,pt2,color,thickness=None,lineType=None,shift=None)以下来自官方文档和自己的理解img:指定一张图片,在这张图片的基础上进行绘制;pt1:矩形的一个顶点;pt2:与pt1在对角线上相对的矩形的顶点;......
  • 原始翎风CLIENT8位 (7) 对于@(pcm^)的理解
    procedureTfrmMain.ClientGetMyMagics(body:string);vari:integer;data:string;pcm:PTClientMagic;beginfori:=0tog_MagicList.Count-1doDispose(PTClientMagic(g_MagicList[i]));//释放指针,g_MagicList.Clear;//清理列表whileTRUEdobegin......