using _3DTools; using JiangsuEarthquake.Common; using JiangsuEarthquake.Models.FTP; using JiangsuEarthquake.ViewModels; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Forms; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; using static MaterialDesignThemes.Wpf.Theme; using MessageBox = System.Windows.MessageBox; using UserControl = System.Windows.Controls.UserControl; using HandyControl.Tools.Extension; using System.Collections.ObjectModel; namespace JiangsuEarthquake.Views.UserControls { /// /// FTPSettingView.xaml 的交互逻辑 /// public partial class FTPSettingView : UserControl { public FTPSettingView(int id) { InitializeComponent(); stationId = id; this.DataContext = this; ReturnHighFTPBtn.IsEnabled = false;//禁用返回上一级菜单按钮 ReturnHighLoaclBtn.IsEnabled = false;//禁用返回上一级菜单按钮 if (stationId == 1) { ftpcon.IP = Tools.GetAppSetting("FTPIP1"); ftpcon.Port = int.Parse(Tools.GetAppSetting("FTPPort1")); ftpcon.UserName = Tools.GetAppSetting("FTPUserName1"); ftpcon.PassWord = Tools.GetAppSetting("FTPPassword1"); } else { ftpcon.IP = Tools.GetAppSetting("FTPIP2"); ftpcon.Port = int.Parse(Tools.GetAppSetting("FTPPort2")); ftpcon.UserName = Tools.GetAppSetting("FTPUserName2"); ftpcon.PassWord = Tools.GetAppSetting("FTPPassword2"); } RefreshLocalList(@"F:\"); //RefreshFTPList("FTP_Test"); timerDownloadFileMsgHidden.Interval = TimeSpan.FromSeconds(2); timerDownloadFileMsgHidden.Tick += TimerDownloadFileMsgHidden_Tick; timerUploadFileMsgHidden.Interval = TimeSpan.FromSeconds(2); timerUploadFileMsgHidden.Tick += TimerUploadFileMsgHidden_Tick; } int stationId = 1; public FTPLIST ftpList { get; set; } = new FTPLIST(); public FTPConnectModel ftpcon { get; set; } = new FTPConnectModel(); #region 上传下载操作 public DispatcherTimer timerDownloadFileMsgHidden = new DispatcherTimer(); public DispatcherTimer timerUploadFileMsgHidden = new DispatcherTimer(); private void TimerDownloadFileMsgHidden_Tick(object sender, EventArgs e) { DownloadFileMsg.Visibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void DownloadFileBtn_Click(object sender, RoutedEventArgs e) { //首先判断是否有选中文件 if (FTPFloderDataGrid.SelectedItems.Count == 0) { DownloadFileMsg.Visibility = Visibility.Visible; DownloadFileMsg.Text = "请选择文件!"; DownloadFileMsg.Foreground = new SolidColorBrush(Colors.Red); timerDownloadFileMsgHidden.Start(); return; } foreach (FTPModel ft in FTPFloderDataGrid.SelectedItems) { if (!System.IO.File.Exists(ftpList.datagrid2Path + ft.FileName)) { ftpcon.Download(ftpList.datagrid2Path, ft.FileName); RefreshLocalList(ftpList.datagrid2Path); DownloadFileMsg.Visibility = Visibility.Visible; DownloadFileMsg.Text = "文件下载成功"; DownloadFileMsg.Foreground = new SolidColorBrush(Colors.Green); timerDownloadFileMsgHidden.Start(); } else { MessageBoxResult result = MessageBox.Show("文件已存在,是否覆盖?", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: //先删除原文件 File.Delete(ftpList.datagrid2Path + ft.FileName); //再将新文件拷贝进来 ftpcon.Download(ftpList.datagrid2Path, ft.FileName); RefreshLocalList(ftpList.datagrid2Path); DownloadFileMsg.Visibility = Visibility.Visible; DownloadFileMsg.Text = "文件下载成功"; DownloadFileMsg.Foreground = new SolidColorBrush(Colors.Green); timerDownloadFileMsgHidden.Start(); break; case MessageBoxResult.No: return; } } } } private void TimerUploadFileMsgHidden_Tick(object sender, EventArgs e) { UploadFileMsg.Visibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void UploadFileBtn_Click(object sender, RoutedEventArgs e) { if (LocalFloderDataGrid.SelectedItems.Count == 0) { UploadFileMsg.Visibility = Visibility.Visible; UploadFileMsg.Text = "请选择文件!"; UploadFileMsg.Foreground = new SolidColorBrush(Colors.Red); timerUploadFileMsgHidden.Start(); return; } foreach (FTPModel item in LocalFloderDataGrid.SelectedItems) { //首先判断文件类型是否为文件夹 if (item.IsDirectory) { if (!ftpcon.IsDirectoryExist(item.FileName)) //文件夹不存在 { ftpcon.Upload(item.FilePath); //上传 RefreshFTPList(ftpList.datagrid1Path); //刷新 UploadFileMsg.Visibility = Visibility.Visible; UploadFileMsg.Text = "文件上传成功"; UploadFileMsg.Foreground = new SolidColorBrush(Colors.Green); timerUploadFileMsgHidden.Start(); } else //文件夹存在 { MessageBoxResult result = MessageBox.Show("文件夹已存在,是否覆盖?", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: //先删除原文件 ftpcon.RemoveDirectory(ftpcon.ftpRemotePath + "/" + item.FileName); //再将新文件拷贝进来 ftpcon.Upload(item.FilePath); //上传文件夹 //刷新一下界面 RefreshFTPList(ftpList.datagrid1Path); UploadFileMsg.Visibility = Visibility.Visible; UploadFileMsg.Text = "文件上传成功"; UploadFileMsg.Foreground = new SolidColorBrush(Colors.Green); timerUploadFileMsgHidden.Start(); break; case MessageBoxResult.No: return; } } } else { if (!ftpcon.IsFileExist(item.FileName)) //如果文件不存在 { ftpcon.Upload(item.FilePath); //上传 RefreshFTPList(ftpList.datagrid1Path); //刷新 UploadFileMsg.Visibility = Visibility.Visible; UploadFileMsg.Text = "文件上传成功"; UploadFileMsg.Foreground = new SolidColorBrush(Colors.Green); timerUploadFileMsgHidden.Start(); } else //文件存在 { MessageBoxResult result = MessageBox.Show("文件已存在,是否覆盖?", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: //先删除原文件 ftpcon.DeleteFile(item.FileName); //再将新文件拷贝进来 ftpcon.Upload(item.FilePath); //上传文件 //刷新一下界面 RefreshFTPList(ftpList.datagrid1Path); UploadFileMsg.Visibility = Visibility.Visible; UploadFileMsg.Text = "文件上传成功"; UploadFileMsg.Foreground = new SolidColorBrush(Colors.Green); timerUploadFileMsgHidden.Start(); break; case MessageBoxResult.No: return; } } } } } #endregion #region 更新文件目录 /// /// 更新本地文件目录 /// /// public void RefreshLocalList(string LocalPath) { try { ftpList.datagrid2Path = LocalPath; string[] localfiles = Directory.GetFiles(ftpList.datagrid2Path); //获取文件名称 string[] localdir = Directory.GetDirectories(ftpList.datagrid2Path); //获取目录名称 List fs = new List(); for (int i = 0; i < localfiles.Length; i++) { fs.Add(new FTPModel() { FileName = localfiles[i].Split('\\')[localfiles[i].Split('\\').Length - 1], CreateTime = Directory.GetLastAccessTime(localfiles[i]), FileSize = FilesHelper.GetFileSize(localfiles[i]), IsDirectory = false, FilePath = localfiles[i] }); } for (int i = 0; i < localdir.Length; i++) { fs.Add(new FTPModel() { FileName = localdir[i].Split('\\')[localdir[i].Split('\\').Length - 1], CreateTime = Directory.GetLastAccessTime(localdir[i]), FileSize = "", IsDirectory = true, FilePath = localdir[i] }); } ftpList.LocalList = fs; } catch (Exception ex) { } } /// /// 更新FTP文件目录 /// /// public void RefreshFTPList(string FTPPath) { try { string ftpURL = ftpcon.getFtpHelper(ftpcon.IP, ftpcon.Port, FTPPath, ftpcon.UserName, ftpcon.PassWord, ""); List list = ftpcon.ListDirectories(); //该目录下的文件夹 List File_list = ftpcon.ListFiles(); //该目录下的文件 if (File_list != null) { for (int i = 0; i < File_list.Count; i++) { list.Add(File_list[i]); } } ftpList.FTPList = list; } catch (Exception ex) { } } #endregion #region FTP目录操作 /// /// FTP目录文件夹双击打开事件 /// /// /// private void FTPFloderDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (FTPFloderDataGrid.SelectedItem == null) return; ftpList.datagrid1Path += ((FTPModel)FTPFloderDataGrid.SelectedItem).FileName + "/"; RefreshFTPList(ftpList.datagrid1Path); ReturnHighFTPBtn.IsEnabled = true; } /// /// FTP目录文件夹返回上级 /// /// /// private void ReturnHighFTPBtn_Click(object sender, RoutedEventArgs e) { if (Regex.Matches(ftpList.datagrid1Path, "/").Count == 1) { ftpList.datagrid1Path = ""; ReturnHighFTPBtn.IsEnabled = false; } else { int wz = 0; for (int i = 0; i < ftpList.datagrid1Path.Length - 1; i++) { if (ftpList.datagrid1Path.Substring(i, 1).Equals("/")) { wz = i; } } ftpList.datagrid1Path = ftpList.datagrid1Path.Remove(wz + 1, ftpList.datagrid1Path.Length - wz - 1); } RefreshFTPList(ftpList.datagrid1Path); } /// /// FTP目录文件列表刷新 /// /// /// private void RefreshFTPBtn_Click(object sender, RoutedEventArgs e) { RefreshFTPList(ftpList.datagrid1Path); } /// /// FTP目录文件删除 /// /// /// private void DeleteFTPBtn_Click(object sender, RoutedEventArgs e) { //首先判断是否有选中文件 if (FTPFloderDataGrid.SelectedItems.Count == 0) { MessageBox.Show("请选择需要删除的文件或文件夹!"); return; } MessageBoxResult result = MessageBox.Show("请确认是否删除选中的文件!", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: List fTPModels = new List(); foreach (FTPModel item in FTPFloderDataGrid.SelectedItems) { //首先判断需要删除的文件类型 if (item.IsDirectory) //如果是文件目录 { ftpcon.RemoveDirectory(item.FilePath); if (FTPFloderDataGrid.SelectedItems.Count == 0) break; } else //选中的内容是文件 { ftpcon.DeleteFile(item.FileName); if (FTPFloderDataGrid.SelectedItems.Count == 0) break; } } RefreshFTPList(ftpList.datagrid1Path); break; case MessageBoxResult.No: return; } } /// /// 选择FTP文件夹目录 /// /// /// private void SelectFTPPathBtn_Click(object sender, RoutedEventArgs e) { ftpList.datagrid1Path = "FTP_Test"; //ftpcon.ftpURI = ftpList.datagrid1Path; } /// /// 确认FTP文件夹目录 /// /// /// private void EnsureFTPPathBtn_Click(object sender, RoutedEventArgs e) { RefreshFTPList(ftpList.datagrid1Path); } #endregion #region 本地目录操作 /// /// 本地目录文件夹双击打开事件 /// /// /// private void LocalFloderDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (LocalFloderDataGrid.SelectedItem == null) return; if (!((FTPModel)LocalFloderDataGrid.SelectedItem).IsDirectory) return; RefreshLocalList(((FTPModel)LocalFloderDataGrid.SelectedItem).FilePath + "\\"); ReturnHighLoaclBtn.IsEnabled = true; } /// /// 本地目录文件及返回上级 /// /// /// private void ReturnHighLoaclBtn_Click(object sender, RoutedEventArgs e) { if (Regex.Matches(ftpList.datagrid2Path, @"\\").Count == 1) { ReturnHighLoaclBtn.IsEnabled = false; } else { int wz = 0; for (int i = 0; i < ftpList.datagrid2Path.Length - 1; i++) { if (ftpList.datagrid2Path.Substring(i, 1).Equals("\\")) { wz = i; } } ftpList.datagrid2Path = ftpList.datagrid2Path.Remove(wz + 1, ftpList.datagrid2Path.Length - wz - 1); RefreshLocalList(ftpList.datagrid2Path); } } /// /// 本地目录文件列表刷新 /// /// /// private void RefreshLocalBtn_Click(object sender, RoutedEventArgs e) { RefreshLocalList(ftpList.datagrid2Path); } /// /// 本地目录文件删除 /// /// /// private void DeleteLocalBtn_Click(object sender, RoutedEventArgs e) { //首先判断是否有选中文件 if (LocalFloderDataGrid.SelectedItems.Count == 0) { MessageBox.Show("请选择需要删除的文件或文件夹!"); return; } MessageBoxResult result = MessageBox.Show("请确认是否删除选中的文件!", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: foreach (FTPModel item in LocalFloderDataGrid.SelectedItems) { //首先判断需要删除的文件类型 if (item.IsDirectory) //如果是文件目录 { File.Delete(item.FilePath); if (LocalFloderDataGrid.SelectedItems.Count == 0) break; } else //选中的内容是文件 { File.Delete(item.FilePath); if (LocalFloderDataGrid.SelectedItems.Count == 0) break; } } RefreshLocalList(ftpList.datagrid2Path); break; case MessageBoxResult.No: return; } } /// /// 选择本地文件夹目录 /// /// /// private void SelectLocalPathBtn_Click(object sender, RoutedEventArgs e) { using (FolderBrowserDialog dialog = new FolderBrowserDialog()) { dialog.Description = "请选择文件夹"; DialogResult result = dialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { string folderPath = dialog.SelectedPath; ftpList.datagrid2Path = folderPath; // 使用获取到的文件夹路径 MessageBox.Show("选择的文件夹路径是:" + folderPath); } } } /// /// 确认本地文件夹目录 /// /// /// private void EnsureLocalPathBtn_Click(object sender, RoutedEventArgs e) { RefreshLocalList(ftpList.datagrid2Path); } #endregion private void ConnectSetBtn_Click(object sender, RoutedEventArgs e) { if (stationId == 1) HandyControl.Controls.Dialog.Show(new FTPConnectSstView(1)); else HandyControl.Controls.Dialog.Show(new FTPConnectSstView(2)); } private void FTPFloderDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if ( e.Column.Header.ToString() == "Index" || e.Column.Header.ToString() == "FilePath" || e.Column.Header.ToString() == "IsDirectory") { e.Cancel = true; } } } }