📄 ftpform.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 + -