栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C# 窗口程序 生成txt文件 FTP上传至服务器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 窗口程序 生成txt文件 FTP上传至服务器

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using WebSocket4Net;

namespace Kjmonitor{
    public partial class MainForm : Form{
        public MainForm(){
            InitializeComponent();
            //读取ini配置文件
            iniReader("config.ini");
            iniReader("type.ini");
            iniReader("state.ini");
            iniReader("exstate.ini");
            iniReader("switch_io_d.ini");
            iniReader("switch_io_c.ini");
        }
        
        //读取ini配置文件-----------------------------begin-------------------------------------------------------
        MainForm config = null;
        MainForm typeIni = null;
        MainForm stateIni = null;
        MainForm exstateIni = null;
        MainForm switch_io_dIni = null;
        MainForm switch_io_cIni = null;
        //煤矿名称
        string cs_mine_code = "";
        int Enable = 0;
        private void iniReader(string filename){
            if(filename.Equals("config.ini")){
                config = new MainForm("./config.ini"); 
            }else if(filename.Equals("type.ini")){
                typeIni = new MainForm("./type.ini"); 
            }else if(filename.Equals("state.ini")){
                stateIni = new MainForm("./state.ini"); 
            }else if(filename.Equals("exstate.ini")){
                exstateIni = new MainForm("./exstate.ini"); 
            }else if(filename.Equals("switch_io_d.ini")){
                switch_io_dIni = new MainForm("./switch_io_d.ini"); 
            }else if(filename.Equals("switch_io_c.ini")){
                switch_io_cIni = new MainForm("./switch_io_c.ini"); 
            }
            //煤矿名称
            cs_mine_code = config.ReadValue("煤矿代码","CS_MINE_CODE");
            Enable = int.Parse(config.ReadValue("数据传输","Enable"));
        }
        
        //读取ini文件
        // 声明INI文件的写操作函数 WritePrivateProfileString()  
        [System.Runtime.InteropServices.Dllimport("kernel32")]  
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);  
        // 声明INI文件的读操作函数 GetPrivateProfileString()  
        [System.Runtime.InteropServices.Dllimport("kernel32")]  
        private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);  
        private string sPath = null;  
        public MainForm(string path){  
            this.sPath = path;  
        }  

        public string ReadValue(string section, string key){  
            // 每次从ini中读取多少字节  
            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);  
            // section=配置节,key=键名,temp=上面,path=路径  
            GetPrivateProfileString(section, key, "", temp, 255, sPath); 
            return temp.ToString();  
        }  
        //------------------------------------------------------------------end-----------------------------------------------------------------------------
        
        //连接websocket-------------------------------begin-----------------------------------------------
        void MainFormLoad(object sender, EventArgs e){
            InitUI();
            //首先判断列表框中的项是否大于0
             if(logReveal.Items.Count > 0 )
             {
                //清空所有项
                logReveal.Items.Clear();
             }
        }
         
        private void websocket_MessageReceived(object sender, MessageReceivedEventArgs e){
            MessageReceivedEventArgs responseMsg = (MessageReceivedEventArgs)e; //接收服务端发来的消息
            string strMsg = responseMsg.Message;
            recieveMessage(strMsg);
        }
        
        private void websocket_Closed(object sender, EventArgs e){
            //websocket.Send("一个客户端 下线");
        }

        void websocket_Opened(object sender, EventArgs e){
            Log("websocket_Opened");
            //websocket.Send("一个客户端 上线");
        }
        //-------------------------------end-----------------------------------------------
        
       
        //websocket获取数据并生成文件
        private WebSocket websocket = null;
        private string strSendText = string.Empty;
        //测点定义
        string CMD101 = "";
        //控制定义
        string CMD102 = "";
        //区域定义
        string CMD103 = "";
        //工作面定义
        string CMD104 = "";
        //位置定义
        string CMD105 = "";
        //增量数据
        string CMD106 = "";
        List listFiveMinuter = new List(); 
        Boolean bStart106 = false;
        long lLastTime = 0;
        Boolean bStart30 = false;
        long lLastTime30 = 0;
        
        
        //接收websocket数据
        public void recieveMessage(string jsonText){
            var obj = Newtonsoft.Json.Linq.JObject.Parse(jsonText);
            var id = obj["CMD_ID"].ToString();
            if(id.Equals("101")){
                CMD101 = jsonText;
            }else if(id.Equals("102")){
                CMD102 = jsonText;
            }else if(id.Equals("103")){
                CMD103 = jsonText;
            }else if(id.Equals("104")){
                CMD104 = jsonText;
            }else if(id.Equals("105")){
                CMD105 = jsonText;
            }else if(id.Equals("106")){
                CMD106 = jsonText;
            }
            
            if(!CMD101.Equals("")&&!CMD102.Equals("")&&!CMD106.Equals("")){
                //获取数据生成时间
                string cs_data_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
                //测点定义数据  hashtable
                InitCMD101(cs_data_time);
                //控制定义数据  hashtable
                InitCMD102();
                CMD102 = ""; 
            }
            
            if(!CMD101.Equals("")&&!CMD106.Equals("")){
                //获取数据生成时间
                string cs_data_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
                 //增量数据106初始化
                InitCMD106(cs_data_time);
                //全量数据存入hashtable
                InitCMD_all();

                
                long lCurrentTime30 =  (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
                if(!bStart30){
                    lLastTime30 = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
                    bStart30 = true;
                }
                if(bStart30 && ((lCurrentTime30-lLastTime30)>=long.Parse(config.ReadValue("rtdata生成时间","EnableTime")))){
                    lLastTime30 = lCurrentTime30;
                    //if(Enable==0){
                        //模拟量显示文件
                        createAnalogDisplay(cs_data_time);
                        //开关量显示文件
                        createSwitchDisplay(cs_data_time);
                        //分站状态显示文件
                        createSubstationDisplay(cs_data_time);
                        //开关量状态变化累计时间统计
                        createSwitchStateChange();
                        //分站状态
                        createSubstationState(cs_data_time);
                    //}
                }
                
                
                listFiveMinuter.Add(CMD106);
                long lCurrentTime =  (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
                if(!bStart106){
                    lLastTime = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
                    bStart106 = true;
                }
                if(bStart106 && ((lCurrentTime-lLastTime)>=long.Parse(config.ReadValue("rtdata生成时间","intervalTime")))){
                    lLastTime = lCurrentTime;
                    //if(Enable==0){
                        createListFiveData();
                        createFiveMinuteData();
                    //}
                }
            }
        }
        
        //接收数据并存入本地hashtable------------------------------begin--------------------------------------
        //测点定义数据
        Hashtable CMD101_Hash = new Hashtable();
        private void InitCMD101(string time){
            CMD101_Hash.Clear();
             JObject obj = Newtonsoft.Json.Linq.JObject.Parse(CMD101);
             JArray content = (JArray)obj["CONTENT"];
            for(int i=0;i list_value = new List(); 
            List list_state = new List(); 
            //测点定义数据101的数值、状态集合
            foreach (string key in CMD101_Hash.Keys){
                if (key.Contains("A")){
                    string[] data = (string[])CMD101_Hash[key];
                    string strs = key +","+ data[46];
                    list_value.Add(strs);
                    string states = key +","+ data[44]+","+ data[45];
                    list_state.Add(states);
                }
            }
            
            //增量数据106的数值、状态集合
            foreach (string jsonList in listFiveMinuter){
                JObject obj = Newtonsoft.Json.Linq.JObject.Parse(jsonList);
                 JArray content = (JArray)obj["CONTENT"];
                 for(int i=0;i list){
            key_val_Hash.Clear();
            foreach(string list_value in list){
                string[] sArray=list_value.Split(',') ;
                string key = sArray[0];
                    string value = sArray[1];
                    if (!key_val_Hash.ContainsKey(key)) {
                        List list1 = new List(); 
                        list1.Add(float.Parse(value));
                        key_val_Hash.Add(key,list1);
                    }else {
                        List list1 = (List)key_val_Hash[key];
                        list1.Add(float.Parse(value));
                        key_val_Hash.Remove(key);
                        key_val_Hash.Add(key,list1);
                }
            }
            getAvgMaxMin();
            list = new List(); 
        }
        
        //求平均值
        Hashtable key_avg_Hash = new Hashtable();
        private void getAvgMaxMin(){
            key_avg_Hash.Clear();
            foreach (string key in key_val_Hash.Keys){
                List list = (List)key_val_Hash[key];
                float sum = 0;
                foreach(float list_value in list){
                    sum += list_value;
                }
                List list_val = new List();
                float ss_analog_avgvalue = sum/list.Count;
                float ss_analog_maxvalue = list.Max();
                float ss_analog_minvalue = list.Min();
                list_val.Add(ss_analog_avgvalue);
                list_val.Add(ss_analog_maxvalue);
                list_val.Add(ss_analog_minvalue);
                key_avg_Hash.Add(key,list_val);
            }
        }
        
        //状态hashtable
        Hashtable key_state_Hash = new Hashtable();
        Hashtable key_exstate_Hash = new Hashtable();
        private void createCodeStateHash(List list_state){
            key_state_Hash.Clear();
            key_exstate_Hash.Clear();
            foreach(string list in list_state){
                string[] sArray=list.Split(',') ;
                string key = sArray[0];
                    string state = sArray[1];
                    string exstate = sArray[2];
                    if (!key_state_Hash.ContainsKey(key)) {
                        List list1 = new List(); 
                    list1.Add(int.Parse(state));
                    key_state_Hash.Add(key, list1);
                } else {
                    List list1 = new List(); 
                    list1.Add(int.Parse(state));
                    key_state_Hash.Remove(key);
                    key_state_Hash.Add(key, list1);
                }
                    if (!key_exstate_Hash.ContainsKey(key)) {
                        List list1 = new List(); 
                    list1.Add(int.Parse(exstate));
                    key_exstate_Hash.Add(key, list1);
                } else {
                    List list1 = new List(); 
                    list1.Add(int.Parse(exstate));
                    key_exstate_Hash.Remove(key);
                    key_exstate_Hash.Add(key, list1);
                }
            }
        }
        //接收数据并存入本地hashtable------------------------------end--------------------------------------
        
        //分钟数据
        Boolean ftp_boo = true;
        private void createFiveMinuteData(){
            //获取数据生成时间
            string cs_data_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
            string rowStr = "";
            foreach (string key in CMD_all_Hash.Keys){
                if (key.Contains("A")){
                    //{值、传感器名称、状态、扩展状态、安装地点、分站编号、传感器编号}
                    string[] data = (string[])CMD_all_Hash[key];
                    //分站编号
                    int ss_station_code = int.Parse(data[5]);
                    //描述(安装地点)
                    string ss_transducer_point = data[4];  
                    //传感器编号
                    int ss_transducer_code = int.Parse(data[6]);
                    //类型
                    string ss_transducer_type = typeIni.ReadValue("传感器类型",data[1]);
                    //平均值
                    List list = (List)key_avg_Hash[key];
                    //平均值
                    float ss_transducer_avg = 0;
                    //最大值
                    float ss_transducer_max = 0;
                    //最小值
                    float ss_transducer_min = 0;
                    for(int i = 0;i list_state = (List)key_state_Hash[key];
                    for(int i = 0;i list_exstate = (List)key_exstate_Hash[key];
                    for(int i = 0;i>1;
            }
            return channel;
        }
        
        //转换数据格式
        private string formatToThree(string str){
            return double.Parse(str).ToString("000");
        }
        private string formatToTwo(string str){
            return double.Parse(str).ToString("00");
        }
        
        //ftp上传
        private string ftpUpload(string filename){
            string url = config.ReadValue("ftp","ftpurl");
            string file = config.ReadValue("ftp","file");
            string username = config.ReadValue("ftp","username");
            string password = config.ReadValue("ftp","password");
            FtpHelper ftp = new FtpHelper(url,file,username,password);
            string ret = ftp.Upload(filename);
            return ret;
        }
        
        //ftp上传缓存文件
        private void ftpBufferFile(){
            if(ftp_boo){
                Log("ftp上传缓存成功!");
                string path = config.ReadValue("文件目录","filename_buffer");
                DirectoryInfo folder = new DirectoryInfo(path);
                foreach (FileInfo file in folder.GetFiles("*.txt")){
                    ftpUpload(file.FullName);
                }
                DeleteFolder(path);
                ftp_boo = false;
            }
        }
        
        //清空缓存中文件
        private static void DeleteFolder(string dir){
            foreach (string d in Directory.GetFileSystemEntries(dir)){
                if (File.Exists(d)){
                    FileInfo fi = new FileInfo(d);
                    if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
                        fi.Attributes = FileAttributes.Normal;
                    File.Delete(d);//直接删除其中的文件  
                }else{
                    DirectoryInfo d1 = new DirectoryInfo(d);
                    if (d1.GetFiles().Length != 0){
                        DeleteFolder(d1.FullName);//递归删除子文件夹
                    }
                    Directory.Delete(d);
                }
            }
        }
        void MonitorBtnClick(object sender, EventArgs e){
            FolderBrowserDialog path = new FolderBrowserDialog();
            path.ShowDialog();
            this.fileReserve.Text = path.SelectedPath;
        }
        
        void FileReserveBufferBtnClick(object sender, EventArgs e){
            FolderBrowserDialog path = new FolderBrowserDialog();
            path.ShowDialog();
            this.fileReserveBuffer.Text = path.SelectedPath;
        }
        
        void LogRevealSelectedIndexChanged(object sender, EventArgs e){
        }
        
        void SaveClick(object sender, EventArgs e){
            int isNull = textIsNull();
            generateIni();
            if(isNull==0){
                this.save.Enabled =false;
                connectWebsocket();
                Log("保存成功!");
            }
        }
        
        //生成config.ini文件
        private void generateIni(){
            ConfUtil.WritePrivateProfileString("煤矿代码","CS_MINE_CODE", this.minecode.Text);
            ConfUtil.WritePrivateProfileString("IP地址(KJ66的IP地址)","URL", this.url.Text);
            ConfUtil.WritePrivateProfileString("端口号","PORT", this.port.Text);
            ConfUtil.WritePrivateProfileString("rtdata生成时间","intervalTime", this.intervalTime.Text);
            ConfUtil.WritePrivateProfileString("rtdata生成时间","EnableTime", this.enableTime.Text);
            ConfUtil.WritePrivateProfileString("地点","AddrOrWNameOrRName", this.point.Text);
            ConfUtil.WritePrivateProfileString("ftp","ftpurl", this.ftpurl.Text);
            ConfUtil.WritePrivateProfileString("ftp","file", this.ftpfile.Text);
            ConfUtil.WritePrivateProfileString("ftp","username", this.ftpusername.Text);
            ConfUtil.WritePrivateProfileString("ftp","password", this.ftppassword.Text);
            ConfUtil.WritePrivateProfileString("文件目录","fileReserve", this.fileReserve.Text);
            ConfUtil.WritePrivateProfileString("文件目录","fileReserveBuffer", this.fileReserveBuffer.Text);
            string str = config.ReadValue("煤矿代码","CS_MINE_CODE");
        }
        
        //websocket连接
        private void connectWebsocket(){
            string url = config.ReadValue("IP地址(KJ66的IP地址)","URL");
            string port = config.ReadValue("端口号","PORT");
            websocket = new WebSocket("ws://"+url+":"+port);
            websocket.Opened += websocket_Opened;
            websocket.Closed += websocket_Closed;
            websocket.MessageReceived += websocket_MessageReceived;
            websocket.Open();
        }
        
        //config.ini页面初始化
        private void InitUI()
        {
            this.minecode.Text = ConfUtil.GetProfileString("煤矿代码","CS_MINE_CODE");
            this.url.Text = ConfUtil.GetProfileString("IP地址(KJ66的IP地址)","URL");
            this.port.Text = ConfUtil.GetProfileString("端口号","PORT");
            this.intervalTime.Text = ConfUtil.GetProfileString("rtdata生成时间","intervalTime");
            this.enableTime.Text = ConfUtil.GetProfileString("rtdata生成时间","EnableTime");
            this.point.Text = ConfUtil.GetProfileString("地点","AddrOrWNameOrRName");
            this.enableState.Text = ConfUtil.GetProfileString("数据传输","Enable");
            this.ftpurl.Text = ConfUtil.GetProfileString("ftp","ftpurl");    
            this.ftpfile.Text = ConfUtil.GetProfileString("ftp","file");    
            this.ftpusername.Text = ConfUtil.GetProfileString("ftp","username");    
            this.ftppassword.Text = ConfUtil.GetProfileString("ftp","password");
            this.fileReserve.Text = ConfUtil.GetProfileString("文件目录","fileReserve");    
            this.fileReserveBuffer.Text = ConfUtil.GetProfileString("文件目录","fileReserveBuffer");            
            this.minecode.Focus();
        }
        
        //输入框不可为空
        private int textIsNull(){
            if (this.minecode.Text.Trim().Equals("")) {
                Log("煤矿代码不能为空");
                this.minecode.Focus();
                return 1;
            }
            ...
        }
        
        //listBox输出日志
        private delegate void DoLog(string msg);//代理
        private void Log(string msg){
             if (this.InvokeRequired){
                DoLog doLog = new DoLog(Log);
                this.Invoke(doLog, new object[] { msg });
            }else{
            if (logReveal.Items.Count > 20) {
                logReveal.Items.RemoveAt(0);
            }
            msg = DateTime.Now.ToLocalTime().ToString() + " " + msg;
            logReveal.Items.Add(msg);
            }
        }
    }
}

实现效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/231400.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号