⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpform.cs

📁 本软件是一个以FTP形式上传下载资料的软件
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Collections;

namespace ftpTransport
{
    public partial class ftpForm : Form
    {
        private static ftpForm ff;
        delegate void UpdateListView(Object obj,Object obj2);
        delegate void UpdateListView2(Object obj);
        delegate void LocalWatcher(Object obj, Object obj2);
        public ftpForm()
        {
            InitializeComponent();
            
        }
        
        public ftpForm(Form parentForm)
        {
            if (ff == null)
            {
                ff = new ftpForm();
                ff.MdiParent = parentForm;
                ff.Text = "FTP文件监控程序";
                ff.WindowState = FormWindowState.Maximized;
                ff.Show();
                CreateListViewHeader();
                CreateListView2Header();
                Thread thread = new Thread(new ThreadStart(GetLocalFileList));
                thread.IsBackground = true;
                thread.Start();
                Thread threadftp = new Thread(new ThreadStart(GetFtpFiles));
                threadftp.IsBackground = true;
                threadftp.Start();
                Thread threadCompareFiles = new Thread(new ThreadStart(LocalWatcherFun));
                threadftp.IsBackground = true;
                threadCompareFiles.Start();
            }
        }
        ///////////////////本地处理
        private void GetLocalFileList()
        {
            while (true)
            {
                DirectoryInfo di = new DirectoryInfo(Properties.Settings.Default.localFilePath);
                try
                {
                    UpdateListView ulv = new UpdateListView(updateMessage);
                    ff.Invoke(ulv, new object[] { ff.lvLocal, di });
                    int sleeptime = int.Parse(Properties.Settings.Default.Frequence) * 1000;
                    Thread.Sleep(sleeptime);
                }
                catch (Exception ex)
                {
                    MyIO.WriteLog(ex.Message);
                    Thread.Sleep(100000);
                }
            }
        }
        private void updateMessage(Object obj,Object directoryinfo)
        {
            
            DirectoryInfo di = (DirectoryInfo)directoryinfo;
            FileInfo [] fi= di.GetFiles();
            if (fi.Length > 0)
            {
                ListView lvLocal = (ListView)obj;
                lvLocal.View = View.Details;
                lvLocal.BeginUpdate();
                lvLocal.Items.Clear();
                string filename;
                string filesize;
                string datetime;
                for (int i = 0; i < fi.Length; i++)
                {
                    filename = fi[i].Name;
                    filesize = Convert.ToString((fi[i].Length )) + "B";
                    datetime = fi[i].LastWriteTime.ToString();
                    CreateListViewItem(i, filename, filesize, datetime);
                }
                lvLocal.EndUpdate();
            }
        }
        private void CreateListViewHeader()
        {
            ColumnHeader colHead;
            //第一列
            //colHead = new ColumnHeader();
            //colHead.Text = "编号";
            //colHead.Width = 40;
            //ff.lvLocal.Columns.Add(colHead);
            //第二列
            colHead = new ColumnHeader();
            colHead.Text = "文件名";
            colHead.Width = 100;
            ff.lvLocal.Columns.Add(colHead);
            //第三列
            colHead = new ColumnHeader();
            colHead.Text = "文件大小";
            ff.lvLocal.Columns.Add(colHead);
            //第四列
            colHead = new ColumnHeader();
            colHead.Text = "修改时间";
            colHead.Width = 130;
            ff.lvLocal.Columns.Add(colHead);
        }
        private void CreateListViewItem(int id,string filename,string filesize,string datetime)
        {
            ListViewItem lvi;
            lvi = new ListViewItem();
            //lvi.Text = id.ToString();
            lvi.Text = filename;
            lvi.Tag = filename;
            ListViewItem.ListViewSubItem lvsi;
            //lvsi = new ListViewItem.ListViewSubItem();
            //lvsi.Text = filename;
            //lvi.SubItems.Add(lvsi);

            lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = filesize;
            lvi.SubItems.Add(lvsi);

            lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = datetime;
            lvi.SubItems.Add(lvsi);
            ff.lvLocal.Items.Add(lvi);
        }
        private void ftpForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            ff = null;
        }

        ///////////////////远程
        private void GetFtpFiles()
        {
            while (true)
            {
                 try
                {
                    UpdateListView2 ulv2 = new UpdateListView2(updateMessage2);
                    ff.Invoke(ulv2, new object[] { ff.lvRemote });
                    int sleeptime = int.Parse(Properties.Settings.Default.ftpFrequence) * 1000;
                    Thread.Sleep(sleeptime);
                }
                catch (Exception ex)
                {
                    MyIO.WriteLog(ex.Message);
                    Thread.Sleep(100000);
                }
            }
        }
        private void updateMessage2(Object obj)
        {
            ftpClient fc = new ftpClient();
            string[] ftpFiles = fc.GetFileList();
            if (ftpFiles.Length > 0)
            {
                ListView lvo = (ListView)obj;
                lvo.View = View.Details;
                lvo.BeginUpdate();
                lvo.Items.Clear();
                for (int i = 0; i < ftpFiles.Length; i++)
                {
                    #region 测试
                    //string[] fileinfo = ftpFiles[i].Split('\t');
                    //for (int j = 0; j < fileinfo.Length; j++)
                    //{
                    //    MessageBox.Show(fileinfo[j]);
                    //}
                    //MessageBox.Show(ftpFiles[i]);
                    #endregion
                    if(ftpFiles[i]!=string.Empty)
                        CreateListViewItem2(i,ftpFiles[i]); 
                }
                lvo.EndUpdate();
            }
        }
        private void CreateListView2Header()
        {
            ColumnHeader colHead;
            colHead = new ColumnHeader();
            colHead.Text = "文件名";
            colHead.Width = 200;
            ff.lvRemote.Columns.Add(colHead);
        }
        private void CreateListViewItem2(int id,string filename)
        {
            ListViewItem lvi =new ListViewItem();
            lvi.Text = filename.Substring(0, filename.Length - 1) ;
            ff.lvRemote.Items.Add(lvi);
        }
        /////////////////文件比较
        private void FileComPare(Object obj,Object obj2)
        {
            ListView lv1 = (ListView)(obj);
            ListView lv2 = (ListView)(obj2);
            ArrayList al1 = new ArrayList();
            ArrayList al2 = new ArrayList();
            for (int i = 0; i < lv1.Items.Count; i++)
            {
                al1.Add(lv1.Items[i].Text);
                //MessageBox.Show(lv1.Items[0].Text);
            }
            for (int i = 0; i < lv2.Items.Count; i++)
            {
                al2.Add(lv2.Items[i].Text);
            }
            string[] local=new string[al1.Count]; 
            al1.CopyTo(local);
            string[] remote = new string[al2.Count]; 
            al2.CopyTo(remote);
            CompareAndOperate(local, remote);
        }
        private void LocalWatcherFun()
        {
            while (true)
            {
                LocalWatcher lw = new LocalWatcher(FileComPare);
                
                try
                {
                    if (ff!=null && (ff.lvLocal == null || ff.lvRemote == null))
                    {
                        continue;
                    }
                    ff.Invoke(lw, new object[] { ff.lvLocal, ff.lvRemote });
                    int sleeptime = int.Parse(Properties.Settings.Default.ftpFrequence) * 1000;
                    Thread.Sleep(sleeptime);
                }
                catch(Exception ex)
                {
                    MyIO.WriteLog(ex.Message);
                    int sleeptime = int.Parse(Properties.Settings.Default.ftpFrequence) * 1000;
                    Thread.Sleep(sleeptime);
                }
            }
        }

        private void CompareAndOperate(string[] local, string[] remote)
        {
            string localfile;
            string remotefile;
            bool localfind = false;
            bool remotefind = false;
            //扫描本地
            for (int i = 0; i < local.Length; i++)
            {
                localfile = local[i];
                for (int j = 0; j < remote.Length; j++)
                {
                    if (localfile == remote[j])
                    {
                        localfind = true;
                        break;
                    }
                }
                if (!localfind)
                {
                    ftpClient client = new ftpClient();
                    client.UpLoadFile(localfile, localfile);
                }
                localfind = false;
            }
            //扫描远程
            for (int i = 0; i < remote.Length; i++)
            {
                remotefile = remote[i];
                for (int j = 0; j < local.Length; j++)
                {
                    if (remotefile == local[j])
                    {
                        remotefind = true;
                        break;
                    }
                }
                if (!remotefind)
                {
                    ftpClient client = new ftpClient();
                    client.DownLoadFile(remotefile);
                }
                remotefind = false;
            }
        }
        ////////////////
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -