using FTP.Models; 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.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 static System.Net.WebRequestMethods; using File = System.IO.File; namespace FTP { /// /// Interaction logic for MainWindow.xaml /// public partial class FTPControlWindow : Window { public FTPLIST ftpList { get; set; } = new FTPLIST(); public FTPConnectModel ftpcon { get; set; } = new FTPConnectModel(); FilesHelper filesHelper = new FilesHelper(); public FTPControlWindow() { //RefreshLocalList(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase);//获取当前程序运行路径 RefreshLocalList(@"D:\");//获取当前程序运行路径 InitializeComponent(); this.DataContext = this; retrunNext.IsEnabled = false;//禁用返回上一级菜单按钮 retrunNextLocal.IsEnabled = false;//禁用返回上一级菜单按钮 ftpcon.IP = "10.10.10.5"; ftpcon.Port = 21; ftpcon.UserName = "Chen"; ftpcon.PassWord = "Acwy@700715"; } public FTPControlWindow(string IP, int Port, string UserName, string PassWord) { ftpcon.IP = IP; ftpcon.Port = Port; ftpcon.UserName = UserName; ftpcon.PassWord = PassWord; RefreshLocalList(@"D:\");//获取当前程序运行路径 InitializeComponent(); this.DataContext = this; retrunNext.IsEnabled = false;//禁用返回上一级菜单按钮 retrunNextLocal.IsEnabled = false;//禁用返回上一级菜单按钮 } /// /// 文件导出 /// /// /// private void Button_Click_1(object sender, RoutedEventArgs e) { //首先判断是否有选中文件 if (datagrid1.SelectedItems.Count == 0) { MessageBox.Show("请选择文件!"); return; } foreach (FTPModel ft in datagrid1.SelectedItems) { if (!System.IO.File.Exists(ftpList.datagrid2Path + ft.FileName)) { ftpcon.Download(ftpList.datagrid2Path, ft.FileName); RefreshLocalList(ftpList.datagrid2Path); } 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); break; case MessageBoxResult.No: return; break; } } } } /// /// 文件导入 /// /// /// private void Button_Click_2(object sender, RoutedEventArgs e) { if (datagrid2.SelectedItems.Count == 0) { MessageBox.Show("请选择文件!"); return; } foreach (FTPModel item in datagrid2.SelectedItems) { //首先判断文件类型是否为文件夹 if (item.IsDirectory) { if (!ftpcon.IsDirectoryExist(item.FileName)) //文件夹不存在 { ftpcon.Upload(item.FilePath); //上传 RefreshFTPList(ftpList.datagrid1Path); //刷新 } 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); break; case MessageBoxResult.No: return; break; } } } else { if (!ftpcon.IsFileExist(item.FileName)) //如果文件不存在 { ftpcon.Upload(item.FilePath); //上传 RefreshFTPList(ftpList.datagrid1Path); //刷新 } else //文件存在 { MessageBoxResult result = MessageBox.Show("文件已存在,是否覆盖?", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: //先删除原文件 ftpcon.DeleteFile(item.FileName); //再将新文件拷贝进来 ftpcon.Upload(item.FilePath); //上传文件 //刷新一下界面 RefreshFTPList(ftpList.datagrid1Path); break; case MessageBoxResult.No: return; break; } } } } ftpcon.Upload(((FTPModel)datagrid2.SelectedItem).FilePath); } /// /// 设置 /// /// /// private void Button_Click_3(object sender, RoutedEventArgs e) { } /// /// 连接 /// /// /// private void Button_Click_4(object sender, RoutedEventArgs e) { RefreshFTPList(ftpList.datagrid1Path); } /// /// 断开连接 /// /// /// private void Button_Click_5(object sender, RoutedEventArgs e) { ftpList.LocalList.Clear(); } /// /// datagrid1双击事件 /// /// /// private void datagrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e) { ftpList.datagrid1Path += ((FTPModel)datagrid1.SelectedItem).FileName + "/"; RefreshFTPList(ftpList.datagrid1Path); retrunNext.IsEnabled = true; } /// /// 本地文件目录双击事件 /// /// /// private void datagrid2_MouseDoubleClick(object sender, MouseButtonEventArgs e) { FTPModel ftpModel = (FTPModel)datagrid2.SelectedItem; if (!((FTPModel)datagrid2.SelectedItem).IsDirectory) return; RefreshLocalList(((FTPModel)datagrid2.SelectedItem).FilePath + "\\"); retrunNextLocal.IsEnabled = true; } /// /// FTP返回上一级 /// /// /// private void Button_Click_6(object sender, RoutedEventArgs e) { if (Regex.Matches(ftpList.datagrid1Path, "/").Count == 1) { ftpList.datagrid1Path = ""; retrunNext.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 refresh_Click(object sender, RoutedEventArgs e) { RefreshFTPList(ftpList.datagrid1Path); } /// /// FTP文件删除 /// /// /// private void delete_Click(object sender, RoutedEventArgs e) { //首先判断是否有选中文件 if (datagrid1.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 datagrid1.SelectedItems) { //首先判断需要删除的文件类型 if (item.IsDirectory) //如果是文件目录 { ftpcon.RemoveDirectory(item.FilePath); if(datagrid1.SelectedItems.Count == 0) break; } else //选中的内容是文件 { ftpcon.DeleteFile(item.FileName); if (datagrid1.SelectedItems.Count == 0) break; } } RefreshFTPList(ftpList.datagrid1Path); break; case MessageBoxResult.No: return; break; } } /// /// 本地文件返回上一级 /// /// /// private void retrunNextLocal_Click(object sender, RoutedEventArgs e) { if (Regex.Matches(ftpList.datagrid2Path, @"\\").Count == 1) { retrunNext.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 refreshLocal_Click(object sender, RoutedEventArgs e) { RefreshLocalList(ftpList.datagrid2Path); } /// /// 本地文件删除 /// /// /// private void deleteLocal_Click(object sender, RoutedEventArgs e) { //首先判断是否有选中文件 if (datagrid2.SelectedItems.Count == 0) { MessageBox.Show("请选择需要删除的文件或文件夹!"); return; } MessageBoxResult result = MessageBox.Show("请确认是否删除选中的文件!", "警告!", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: foreach (FTPModel item in datagrid2.SelectedItems) { //首先判断需要删除的文件类型 if (item.IsDirectory) //如果是文件目录 { File.Delete(item.FilePath); if (datagrid2.SelectedItems.Count == 0) break; } else //选中的内容是文件 { File.Delete(item.FilePath); if (datagrid2.SelectedItems.Count == 0) break; } } RefreshLocalList(ftpList.datagrid2Path); break; case MessageBoxResult.No: return; break; } } /// /// 更新本地文件目录 /// /// public void RefreshLocalList(string LocalPath) { 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; } public void RefreshFTPList(string FTPPath) { string ftpURL = ftpcon.getFtpHelper(ftpcon.IP, ftpcon.Port, FTPPath, ftpcon.UserName, ftpcon.PassWord, ""); List list = ftpcon.ListDirectories(); //该目录下的文件夹 List File_list = ftpcon.ListFiles(); //该目录下的文件 for (int i = 0; i < File_list.Count; i++) { list.Add(File_list[i]); } ftpList.FTPList = list; } /// /// 主窗口关闭 /// /// /// private void Button_Click(object sender, RoutedEventArgs e) { this.Close(); } /// /// 最大化按钮 /// private void MaxButton_Click(object sender, RoutedEventArgs e) { this.WindowState = this.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized; } /// /// 最小化按钮 /// private void MinButton_Click(object sender, RoutedEventArgs e) { this.WindowState = WindowState.Minimized; } /// /// 顶部蓝色区域按钮按下事件 /// /// /// private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) this.DragMove(); switch (e.ClickCount) { case 2: { WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized; break; } } } } }