C#通过FTP与异构系统实现业务接口

using System;
using System.Data;
using System.Configuration;
using System.Web; 
using System.Net;
using System.IO;
using System.Text;
using System.Configuration; 

/// <summary>
/// FtpWeb 的摘要说明
/// .net对FTP操作类
/// </summary>
namespace inter
{
    public class FtpWebMb
    {
        public FtpWebMb()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        private string ftpServerIP = ConfigurationManager.AppSettings["FtpServer"].ToString();
        private string ftpUserID = ConfigurationManager.AppSettings["FtpUserName"].ToString();
        private string ftpPassword = ConfigurationManager.AppSettings["FtpPassWord"].ToString();

        private string ftpInPath = ConfigurationManager.AppSettings["FtpMbInFile"].ToString();
        private string ftpOutPath = ConfigurationManager.AppSettings["FtpMbOutFile"].ToString();

        public bool Upload(string filename)
        {

            bool Result = false;
            try
            {
                FileInfo fileInf = new FileInfo(filename);
                string uri = "ftp://" + ftpServerIP + "/" + ftpInPath + "/" + fileInf.Name;
                FtpWebRequest reqFTP;

                // 根据uri创建FtpWebRequest对象 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                // ftp用户名和密码
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

                // 默认为true,连接不会被关闭
                // 在一个命令之后被执行
                reqFTP.KeepAlive = false;

                // 指定执行什么命令
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

                // 指定数据传输类型
                reqFTP.UseBinary = true;

                // 上传文件时通知服务器文件的大小
                reqFTP.ContentLength = fileInf.Length;

                // 缓冲大小设置为2kb
                int buffLength = 2048;

                byte[] buff = new byte[buffLength];
                int contentLen;

                // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
                FileStream fs = fileInf.OpenRead();

                // 把上传的文件写入流
                Stream strm = reqFTP.GetRequestStream();

                // 每次读文件流的2kb
                contentLen = fs.Read(buff, 0, buffLength);

                // 流内容没有结束
                while (contentLen != 0)
                {
                    // 把内容从file stream 写入 upload stream
                    strm.Write(buff, 0, contentLen);

                    contentLen = fs.Read(buff, 0, buffLength);
                }

                // 关闭两个流
                strm.Close();
                fs.Close();
                Result = true;
            }
            catch (Exception Err)
            {
                DataTransLog("失败", filename + "文件上传出错:" + Err.Message, "FtpWeb.Upload," + filename);
            }

            return Result;

        }

        public void DataTransLog(string Flag, string Content, string Other)
        {
            IniFile ls_IniFile = new IniFile(Environment.CurrentDirectory + "\\log.ini");
            ls_IniFile.WriteLog("ReadData1", Content);
          /*  string Sql = "Insert into DataTrans_Log (DTLOG01,DTLOG02,DTLOG03,DTLOG04)"
             + " Values (getdate(),'" + Flag + "','" + Content + "','" + Other + "')";
            DAL Da = new DAL();
            Da.ExecuteNonQuery(Sql);*/
        }

        /// <summary>
        /// 得到FTP服务器文件列表
        /// </summary>
        /// <returns></returns>
        public string[] GetFileList(string Key)
        {
            string[] downloadFiles;
            StringBuilder result = new StringBuilder();
            FtpWebRequest reqFTP;
            try
            {

                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + ftpOutPath + "/"));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
                reqFTP.UsePassive = false;
                reqFTP.Proxy=null;
                WebResponse response = reqFTP.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                while (line != null)
                {
                    if (Key == "" || line.IndexOf(Key) >= 0)
                    {
                        result.Append(line);
                        result.Append("\n");
                    }
                    line = reader.ReadLine();
                }
                if (result.Length < 1)
                {
                    downloadFiles = null;
                }
                else
                {
                    result.Remove(result.ToString().LastIndexOf('\n'), 1);
                    downloadFiles = result.ToString().Split('\n');
                    // 删除最后的 '\n'        
                }
                reader.Close();
                response.Close();
            }
            catch (Exception Err)
            {
                downloadFiles = null;
                DataTransLog("失败", Key + "文件获取出错:" + Err.Message, "FtpWeb.GetFileList");

            }
            return downloadFiles;
        }

        /// <summary>
        /// 下载文到本地
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="fileName"></param>
        public bool Download(string filePath, string fileName)
        {
            bool Result = false;
            try
            {
                FtpWebRequest reqFTP;

                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);

                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + ftpOutPath + "/" + fileName));

                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

                reqFTP.UseBinary = true;

                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                Stream ftpStream = response.GetResponseStream();

                long cl = response.ContentLength;

                int bufferSize = 2048;

                int readCount;

                byte[] buffer = new byte[bufferSize];

                readCount = ftpStream.Read(buffer, 0, bufferSize);

                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);

                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                }
                ftpStream.Close();
                outputStream.Close();
                response.Close();
                Result = true;
            }
            catch (Exception Err)
            {
                DataTransLog("失败", filePath + fileName + "文件下载出错:" + Err.Message, "FtpWeb.DownLoad," + fileName);
            }

            return Result;

        }

        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="fileName"></param>
        public bool DeleteFile(string fileName)
        {
            bool Result = false;
            try
            {
                string uri = "ftp://" + ftpServerIP + "/" + ftpOutPath + "/" + fileName;
                FtpWebRequest reqFTP;

                // 根据uri创建FtpWebRequest对象 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                // ftp用户名和密码
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

                // 默认为true,连接不会被关闭
                // 在一个命令之后被执行
                reqFTP.KeepAlive = false;

                // 指定执行什么命令
                reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                response.Close();
                Result = true;

            }
            catch (Exception Err)
            {
                DataTransLog("失败", fileName + "文件删除出错:" + Err.Message, "FtpWeb.DeleteFile," + fileName);
            }

            return Result;

        }

        / <summary>
        / 移动文件
        / </summary>
        / <param name="fileName"></param>
        / <returns></returns>
        //public bool MoveToFile(string fileName)
        //{
        //    bool result = false;
        //    try
        //    {
        //        string uri = "ftp://" + ftpServerIP + "/" + ftpInPath + "/" + fileName;
        //        FtpWebRequest reqFTP;

        //        // 根据uri创建FtpWebRequest对象 
        //        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

        //        // ftp用户名和密码
        //        reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

        //        // 默认为true,连接不会被关闭
        //        // 在一个命令之后被执行
        //        reqFTP.KeepAlive = false;

        //        // 指定执行什么命令
        //        reqFTP.Method = WebRequestMethods.Ftp.Rename;

        //        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

        //        response.Close();
        //        Result = true;
        //    }
        //}
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vSLAM中IMU预积分的作用--以惯性导航的角度分析

作为一个学过一点惯导的工程师&#xff0c;在初次接触视觉slam方向时&#xff0c;最感兴趣的就是IMU预积分了。但为什么要用这个预积分&#xff0c;在看了很多材料和书后&#xff0c;还是感觉模模糊糊&#xff0c;云里雾里。 在接触了vSLAM的更多内容后&#xff0c;站在历史研究…

极简web集成 rtsp/rtmp免插件播放,web rtsp/rtmp推流方案

一直有客户要求在Web上集成rtsp/rtmp播放和web推流功能,测试对比各种流服务平台和播放器后&#xff0c;发现在github的ovsyunlive不管是延时&#xff0c;便捷和集成易用性都是非常好&#xff0c;还是看效果吧&#xff0c;直接下载测试如下&#xff1a; github 搜ovsyunlive下载…

STM32 IAP应用开发--bootloader升级程序

STM32 IAP应用开发--bootloader升级程序 Chapter1 STM32 IAP应用开发——通过串口/RS485实现固件升级&#xff08;方式2&#xff09;前言什么是IAP&#xff1f;什么是BootLoader&#xff1f; 方案介绍&#xff1a;1&#xff09;bootloader部分&#xff1a;2&#xff09;APP部分…

Health Kit申请验证有问题?解决方案全解析

在接入Health Kit的过程中&#xff0c;应用上线前需要完成申请验证环节&#xff0c;获得正式的运动健康权限。 我们贴心整理了申请验证被驳回的高频问题&#xff0c;您可以在申请前阅读以下内容&#xff0c;避免在您的申请材料中出现下述问题影响审核通过的进度哦&#xff01;…

纷享销客获评中小企业数字化转型优质服务商

近日&#xff0c;纷享销客成功入选长沙市工信局评定的【中小企业数字化转型优质服务商】&#xff0c;专业服务实力得到官方认可&#xff01; 今年6月&#xff0c;财政部、工信部联合印发《关于开展中小企业数字化转型城市试点工作的通知》&#xff0c;长沙市成功入选首批中小企…

程序员笔记本电脑选 windows 还是 MAC

计算机选择是每个进入 IT 行业同学的第一个重要选择&#xff0c;那么你是怎么选择的呢&#xff1f; 选择操作系统&#xff08;Windows还是macOS&#xff09;取决于程序员的需求、偏好和工作流程。每个操作系统都有其优点和缺点&#xff0c;下面将分别讨论它们&#xff0c;以帮助…

RK3568驱动指南|第七篇 设备树-第61章 实例分析:pinctrl

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

MySQL-sql的优化

表的设计优化索引优化SQL语句优化主从复制、读写分离分库分表 表的设计优化(参考阿里开发手册) 比如设置合适的数值(tinyint int bigint)&#xff0c;要根据实际情况选择 比如设置合适的字符串类型(char和varchar) char定长效率高&#xff0c;varchar可变长度&#xff0c;效…

chatgpt相关问题解答

1. openAI的chatgpt的收费方式有哪几种&#xff1f; 根据OpenAI官方的信息&#xff0c;ChatGPT的收费方式包括两种&#xff1a; 1.订阅计划&#xff08;Subscription Plan&#xff09;&#xff1a;OpenAI提供了ChatGPT Plus订阅计划&#xff0c;每月收费20美元。订阅计划的用…

(论文阅读14/100)End-to-end people detection in crowded scenes

文献阅读笔记 简介 题目 End-to-end people detection in crowded scenes 作者 Russell Stewart, Mykhaylo Andriluka 原文链接 https://arxiv.org/pdf/1506.04878.pdf 关键词 Null 研究问题 当前的人员检测器要么以滑动窗口的方式扫描图像&#xff0c;要么对一组离…

Redis注解式开发结合SSM项目使用与Quartz框架介绍以及击穿、穿透、雪崩问题解决

目录 一、SSM项目整合Redis 1.1 导入pom依赖 1.2 spring-redis.xml 1.3 spring上下文配置 二、Redis注解式开发 2.1 Cacheable 注解 2.2 自定义策略 2.3 CachePut 注解 三、Redis中缓冲、击穿、穿透、雪崩问题解决 3.1 缓冲问题 —— Quartz 框架 3.2 常见的三种问题…

Git查询某次提交属于哪个分支

在Android studio&#xff08;JetBrains系列也类似&#xff09;左下角&#xff0c;可以看到所有提交信息。 选中某一次提交信息&#xff0c;右键&#xff0c;选择“Copy Revision Number”&#xff0c;如下图&#xff1a; 打开Android studio的Terminal&#xff0c;输入git b…

【广州华锐互动】3D全景虚拟旅游在文旅行业的应用场景

随着科技的不断发展&#xff0c;3D全景虚拟旅游正在成为一种新兴的旅游体验方式&#xff0c;它可以帮助旅游者更加深入地了解旅游信息&#xff0c;提升旅游体验。下面我们将详细介绍3D全景虚拟旅游可以应用于哪些场景。 一、旅游规划 3D全景虚拟旅游可以帮助旅游者更加直观地进…

SQL数据库使用方法

首先打开sqlite3.exe所在文件夹&#xff0c;如图1 图1 在文件夹路径中将路径改为cmd&#xff0c;如图2所示 图2 在弹出的cmd窗口中输入如图3所示。 图3 sqlite3 tichiceliang.db 其中tichiceliang是数据库名称。然后按enter&#xff0c;再在cmd中输入.table,可以看到文件夹目…

PC9502双节锂电池充电管理芯片高精度外围元件少SOP8封装

■ 产品概述 PC9502 系列是一款双节锂电池充电管理芯片。 该芯片 包含了充电状态检测、充电过程、温度检测等&#xff0c;内部还集成 一个高精度的基准电压模块&#xff0c;此芯片采用 SOP-8 封装。 PC9502 充电包含三种模式&#xff1a;预充电&#xff0c;恒流充电&#x…

Cassandra介绍(二)

1.8. 数据 存储 &#xff08; CommitLog、MemTable、SSTable &#xff09; 写请求分别到 CommitLog 和 MemTable, 并且 MemTable 的数据会刷写到磁盘 SSTable 上. 除 了写数据,还有索引也会保存到磁盘上. 先将数据写到磁盘中的 commitlog&#xff0c;同时追加到中内存中的数据…

LinkdeList集合

1.LinkdeList集合的特点&#xff1a; 1.LinkedList是集合的一个实现类 2.LinkedList内部封装了一个双向链表 3.LinkedList集合的增删快&#xff0c;查询慢 4.线程不安全 2.LinkedList集合的方法 1.添加 1.boolean add(Object element) 将元素附加到链表末尾 2.boolean add(int…

通过you-get命令行工具下载B站等常见网站高清视频

参考&#xff1a; you-get&#xff1a;https://github.com/soimort/you-get EditThisCookie 源码&#xff1a;https://github.com/ETCExtensions/Edit-This-Cookie EditThisCookie 官网&#xff1a;https://www.editthiscookie.com/ you-get 是一个非常好用的命令行版视频下载工…

【C语言从入门到放弃 3】函数、枚举、指针、函数指针和回调函数详解

摘要&#xff1a;C语言是一种强大而灵活的编程语言&#xff0c;它提供了丰富的函数、枚举、指针、函数指针和回调函数等特性&#xff0c;使得程序员能够更好地进行程序设计和开发。本文将通过简单的示例代码介绍这些特性的用法和优势。 一、函数 函数是C语言中的基本构建块&a…

分享98个节日庆典PPT,总有一款适合您

分享98个节日庆典PPT&#xff0c;总有一款适合您 PPT下载链接&#xff1a;https://pan.baidu.com/s/1gNj_uRLz9a5uTG97ezma7Q?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知识付…