1282 lines
54 KiB
C#
1282 lines
54 KiB
C#
|
using BrightIdeasSoftware;
|
|||
|
using ObjectListViewDemo;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.ComponentModel;
|
|||
|
using System.Data;
|
|||
|
using System.Drawing;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows.Forms;
|
|||
|
using ryCommon;
|
|||
|
using System.Collections;
|
|||
|
using System.Drawing.Drawing2D;
|
|||
|
using WeifenLuo.WinFormsUI.Docking;
|
|||
|
using 开发辅助工具.Tools.SmartEditor;
|
|||
|
using 开发辅助工具.Manager;
|
|||
|
using Newtonsoft.Json.Linq;
|
|||
|
using System.Diagnostics;
|
|||
|
using 开发辅助工具.Manager.FTP;
|
|||
|
using ryCommonDb;
|
|||
|
using ryControls;
|
|||
|
using WinSCP;
|
|||
|
using RySmartEditor.Controls;
|
|||
|
using System.Reflection;
|
|||
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
|
|||
|
using ScintillaNET;
|
|||
|
using WinShell;
|
|||
|
using static System.Net.Mime.MediaTypeNames;
|
|||
|
using System.Runtime.InteropServices.ComTypes;
|
|||
|
|
|||
|
namespace SuperDesign.Tools.SmartEditor
|
|||
|
{
|
|||
|
public partial class FrmFileBrowser_New : DockContent
|
|||
|
{
|
|||
|
public FrmFileBrowser_New()
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
SetupColumns();
|
|||
|
SetupList();
|
|||
|
SetupDragAndDrop();
|
|||
|
//olvFiles.FullRowSelect = false;
|
|||
|
helper_tree = new SysImageListHelper(this.TreeDir);
|
|||
|
olvFiles.CellEditActivation = ObjectListView.CellEditActivateMode.SingleClick;
|
|||
|
TreeDir.AfterSelect += TreeDir_AfterSelect;
|
|||
|
procUse = true;
|
|||
|
CbbMatch.SelectedIndex = 0;
|
|||
|
procUse = false;
|
|||
|
}
|
|||
|
|
|||
|
private void TreeDir_AfterSelect(object sender, TreeViewEventArgs e)
|
|||
|
{
|
|||
|
var info = (MyFileSystemInfo)e.Node.Tag;
|
|||
|
this.textBoxFolderPath.Text= info.FullName;
|
|||
|
PopulateListFromPath(info.FullName);
|
|||
|
if (e.Node.Nodes.Count == 0) { LoadDir(e.Node,1); }
|
|||
|
}
|
|||
|
SysImageListHelper helper_tree;
|
|||
|
private void LoadDir(TreeNode parent,int index)
|
|||
|
{
|
|||
|
if (parent == null)
|
|||
|
{
|
|||
|
var drives = DriveInfo.GetDrives();
|
|||
|
foreach (var drive in drives)
|
|||
|
{
|
|||
|
if (!drive.IsReady) { continue; }
|
|||
|
MyFileSystemInfo info = new MyFileSystemInfo(drive.RootDirectory, "");
|
|||
|
var node = new TreeNode(drive.Name.Trim('\\') + " " + drive.VolumeLabel)
|
|||
|
{
|
|||
|
ImageIndex = helper_tree.GetImageIndex(drive.Name)
|
|||
|
};
|
|||
|
node.SelectedImageIndex = node.ImageIndex;
|
|||
|
node.Tag = info;
|
|||
|
TreeDir.Nodes.Add(node);
|
|||
|
if(index<1 && (drive.DriveFormat=="NTFS" || drive.DriveFormat == "FAT32"))
|
|||
|
{
|
|||
|
LoadDir(node,0);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var parent_info = (MyFileSystemInfo)parent.Tag;
|
|||
|
try
|
|||
|
{
|
|||
|
var list = parent_info.AsDirectory.GetDirectories();
|
|||
|
for (int i = 0; i < list.Length; i++)
|
|||
|
{
|
|||
|
MyFileSystemInfo info = new MyFileSystemInfo(list[i], "");
|
|||
|
var node = new TreeNode(list[i].Name)
|
|||
|
{
|
|||
|
ImageIndex = helper_tree.GetImageIndex(list[i].FullName)
|
|||
|
};
|
|||
|
node.SelectedImageIndex = node.ImageIndex;
|
|||
|
node.Tag = info;
|
|||
|
parent.Nodes.Add(node);
|
|||
|
if (index < 1)
|
|||
|
{
|
|||
|
LoadDir(node, 1);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch(Exception ex)
|
|||
|
{
|
|||
|
if(index==0)
|
|||
|
MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|||
|
olvFiles.ClearObjects();
|
|||
|
olvColumnName.Text = "文件名(" + olvFiles.GetItemCount() + ")";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void SetupDragAndDrop()
|
|||
|
{
|
|||
|
|
|||
|
// Drag and drop support
|
|||
|
|
|||
|
// Indicate that the OLV can be used to drag items out.
|
|||
|
// You can write this code, or you can set IsSimpleDropSource to true (in the Designer).
|
|||
|
this.olvFiles.DragSource = new SimpleDragSource();
|
|||
|
|
|||
|
// Indicate that the OLV can be accept items being dropped on it.
|
|||
|
// These items could come from an ObjectListView or from some other control (or even
|
|||
|
// from another application).
|
|||
|
// If the drag source is an ObjectListView, you can listen for ModelCanDrop and
|
|||
|
// ModelDropped events, which have some extra properties to make your life easier.
|
|||
|
// If the drag source is not an ObjectListView, you have to listen for CanDrop and
|
|||
|
// Dropped events, and figure out everything for yourself.
|
|||
|
|
|||
|
SimpleDropSink dropSink = new SimpleDropSink();
|
|||
|
dropSink.CanDropOnItem = true;
|
|||
|
//dropSink.CanDropOnSubItem = true;
|
|||
|
dropSink.FeedbackColor = Color.IndianRed; // just to be different
|
|||
|
this.olvFiles.DropSink = dropSink;
|
|||
|
|
|||
|
// For our purpose here, we will make it that if you drop one or more person
|
|||
|
// onto someone, they all become married.
|
|||
|
dropSink.ModelCanDrop += delegate (object sender, ModelDropEventArgs e) {
|
|||
|
MyFileSystemInfo file = e.TargetModel as MyFileSystemInfo;
|
|||
|
if (file == null)
|
|||
|
e.Effect = DragDropEffects.None;
|
|||
|
else
|
|||
|
{
|
|||
|
if (!file.IsDirectory)
|
|||
|
{
|
|||
|
e.Effect = DragDropEffects.None;
|
|||
|
e.InfoMessage = "不能拖放到文件";
|
|||
|
}
|
|||
|
else
|
|||
|
e.Effect = DragDropEffects.Link;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
dropSink.ModelDropped += delegate (object sender, ModelDropEventArgs e) {
|
|||
|
if (e.TargetModel == null)
|
|||
|
return;
|
|||
|
var item = (MyFileSystemInfo)e.TargetModel;
|
|||
|
var from_list= e.SourceModels;
|
|||
|
var del_list = new List<MyFileSystemInfo>();
|
|||
|
for (int i = 0; i < from_list.Count; i++)
|
|||
|
{
|
|||
|
var from_item = (MyFileSystemInfo)from_list[i];
|
|||
|
if (ryCommon.RyFiles.MoveFile(from_item.FullName, item.FullName) == 0)
|
|||
|
{
|
|||
|
del_list.Add(from_item);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
MessageBox.Show("移动失败=>"+from_item.FullName, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
olvFiles.RemoveObjects(del_list);
|
|||
|
};
|
|||
|
}
|
|||
|
private void SetupColumns()
|
|||
|
{
|
|||
|
// The column setup here is identical to the File Explorer example tab --
|
|||
|
// nothing specific to the TreeListView.
|
|||
|
|
|||
|
// The only difference is that we don't setup anything to do with grouping,
|
|||
|
// since TreeListViews can't show groups.
|
|||
|
|
|||
|
// Get the size of the file system entity.
|
|||
|
// Folders and errors are represented as negative numbers
|
|||
|
this.olvColumnSize.AspectGetter = delegate (object x) {
|
|||
|
MyFileSystemInfo myFileSystemInfo = (MyFileSystemInfo)x;
|
|||
|
return myFileSystemInfo.Length;
|
|||
|
};
|
|||
|
|
|||
|
// Show the size of files as GB, MB and KBs. By returning the actual
|
|||
|
// size in the AspectGetter, and doing the conversion in the
|
|||
|
// AspectToStringConverter, sorting on this column will work off the
|
|||
|
// actual sizes, rather than the formatted string.
|
|||
|
this.olvColumnSize.AspectToStringConverter = delegate (object rowdata, object x) {
|
|||
|
long sizeInBytes = (long)x;
|
|||
|
if (sizeInBytes < 0) // folder or error
|
|||
|
return "";
|
|||
|
return RyFiles.GetFileSizeStr(sizeInBytes);
|
|||
|
};
|
|||
|
this.olvColumnCreated.GroupKeyGetter = delegate (object x) {
|
|||
|
DateTime dt = ((MyFileSystemInfo)x).CreationTime;
|
|||
|
return new DateTime(dt.Year, dt.Month, 1);
|
|||
|
};
|
|||
|
this.olvColumnCreated.GroupKeyToTitleConverter = delegate (object x) {
|
|||
|
return ((DateTime)x).ToString("MMMM yyyy");
|
|||
|
};
|
|||
|
// Group by month-year, rather than date
|
|||
|
this.olvColumnModified.GroupKeyGetter = delegate (object x) {
|
|||
|
DateTime dt = ((MyFileSystemInfo)x).LastWriteTime;
|
|||
|
return new DateTime(dt.Year, dt.Month, 1);
|
|||
|
};
|
|||
|
this.olvColumnModified.GroupKeyToTitleConverter = delegate (object x) {
|
|||
|
return ((DateTime)x).ToString("MMMM yyyy");
|
|||
|
};
|
|||
|
// Show the system description for this object
|
|||
|
this.olvColumnFileType.AspectGetter = delegate (object x) {
|
|||
|
return ShellUtilities.GetFileType(((MyFileSystemInfo)x).FullName);
|
|||
|
};
|
|||
|
|
|||
|
}
|
|||
|
private void SetupList() {
|
|||
|
// We want to draw the system icon against each file name. SysImageListHelper does this work for us.
|
|||
|
|
|||
|
SysImageListHelper helper = new SysImageListHelper(this.olvFiles);
|
|||
|
this.olvColumnName.ImageGetter = delegate (object x) { return helper.GetImageIndex(((MyFileSystemInfo)x).FullName); };
|
|||
|
|
|||
|
// Show tooltips when the appropriate checkbox is clicked
|
|||
|
this.olvFiles.ShowItemToolTips = true;
|
|||
|
this.olvFiles.CellToolTipShowing += delegate (object sender, ToolTipShowingEventArgs e) {
|
|||
|
//if (this.showToolTipsOnFiles)
|
|||
|
var row = (MyFileSystemInfo)e.Model;
|
|||
|
e.Text = String.Format("文件名:{0}\r\n修改时间:{1}\r\n创建时间:{2}\r\n大小:{3}\r\n类型:{4}", row.Name, row.LastWriteTime.ToString(), row.CreationTime.ToString(), RyFiles.GetFileSizeStr(row.Length), ShellUtilities.GetFileType(row.FullName));
|
|||
|
};
|
|||
|
|
|||
|
// Show a menu -- but only when the user right clicks on the first column
|
|||
|
this.olvFiles.CellRightClick += delegate (object sender, CellRightClickEventArgs e) {
|
|||
|
System.Diagnostics.Trace.WriteLine(String.Format("right clicked {0}, {1}). model {2}", e.RowIndex, e.ColumnIndex, e.Model));
|
|||
|
// if (e.ColumnIndex == 0)
|
|||
|
// e.MenuStrip = this.contextMenuStrip2;
|
|||
|
};
|
|||
|
}
|
|||
|
private bool CopyMode { get; set; } = true;
|
|||
|
private readonly ArrayList copy_or_cut_list = new ArrayList();
|
|||
|
|
|||
|
private void FrmFileBrowser_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
private void FrmFileBrowser_FormClosing(object sender, FormClosingEventArgs e)
|
|||
|
{
|
|||
|
//drag.ElevatedDragDrop -= Drag_ElevatedDragDrop;
|
|||
|
}
|
|||
|
private void 重命名ToolStripMenuItem1_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
FrmTitle frm = new FrmTitle();
|
|||
|
frm.TxtTitle.Text = Text;
|
|||
|
frm.Text = "请输入重命名的文件浏览器名称";
|
|||
|
if (frm.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
Text = frm.TxtTitle.Text;
|
|||
|
}
|
|||
|
frm.Dispose();
|
|||
|
}
|
|||
|
public string CurFolderPath { get; set; } = "";
|
|||
|
/// <summary>
|
|||
|
/// 将当前路径的内容加载到列表里
|
|||
|
/// </summary>
|
|||
|
/// <param name="path"></param>
|
|||
|
private void PopulateListFromPath(string path) {
|
|||
|
if (String.IsNullOrEmpty(path))
|
|||
|
return;
|
|||
|
CurFolderPath = path;
|
|||
|
if (MenuDirHistory.Items.Count > 10)
|
|||
|
{
|
|||
|
MenuDirHistory.Items.RemoveAt(MenuDirHistory.Items.Count - 1);
|
|||
|
}
|
|||
|
olvFiles.SelectedObjects=null;
|
|||
|
ToolStripMenuItem item_menu = new ToolStripMenuItem();
|
|||
|
item_menu.Text = path;
|
|||
|
item_menu.Click += Item_menu_Click;
|
|||
|
MenuDirHistory.Items.Insert(0, item_menu);
|
|||
|
DirectoryInfo pathInfo = new DirectoryInfo(path);
|
|||
|
if (!pathInfo.Exists)
|
|||
|
{
|
|||
|
olvFiles.ClearObjects();
|
|||
|
olvColumnName.Text = "文件名(" + olvFiles.GetItemCount() + ")";
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Stopwatch sw = new Stopwatch();
|
|||
|
|
|||
|
Cursor.Current = Cursors.WaitCursor;
|
|||
|
sw.Start();
|
|||
|
try
|
|||
|
{
|
|||
|
var folder_list = pathInfo.GetDirectories();
|
|||
|
var file_list = pathInfo.GetFiles();
|
|||
|
List<MyFileSystemInfo> list = new List<MyFileSystemInfo>();
|
|||
|
foreach (var x in folder_list)
|
|||
|
{
|
|||
|
list.Add(new MyFileSystemInfo(x, ""));
|
|||
|
}
|
|||
|
foreach (var x in file_list)
|
|||
|
{
|
|||
|
list.Add(new MyFileSystemInfo(x, ""));
|
|||
|
}
|
|||
|
this.olvFiles.SetObjects(list);
|
|||
|
olvColumnName.Text = "文件名("+olvFiles.GetItemCount()+")";
|
|||
|
fileSystemWatcher1.Path = CurFolderPath;
|
|||
|
}
|
|||
|
catch { }
|
|||
|
sw.Stop();
|
|||
|
Cursor.Current = Cursors.Default;
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 初始化加载的路径
|
|||
|
/// </summary>
|
|||
|
public string InitPath { get; set; } = "";
|
|||
|
/// <summary>
|
|||
|
/// 初始化选择的路径
|
|||
|
/// </summary>
|
|||
|
public string Init_Selected_Path { get; set; } = "";
|
|||
|
public void GotoPath(string folder, string selected_path) {
|
|||
|
if (TreeDir.Nodes.Count == 0)
|
|||
|
{
|
|||
|
LoadDir(null, 0);
|
|||
|
}
|
|||
|
if (folder.Length == 0)
|
|||
|
{ olvFiles.ClearObjects();textBoxFolderPath.Text = ""; olvColumnName.Text = "文件名(" + olvFiles.GetItemCount() + ")"; return; }
|
|||
|
this.textBoxFolderPath.Text=folder;
|
|||
|
GotoTreePath(folder);
|
|||
|
SelectedPath(selected_path);
|
|||
|
}
|
|||
|
private void SelectedPath(string selected_path)
|
|||
|
{
|
|||
|
var list = olvFiles.ObjectsList;
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var item = (MyFileSystemInfo)list[i];
|
|||
|
if (item.FullName.ToLower() == selected_path.ToLower())
|
|||
|
{
|
|||
|
olvFiles.SelectedObject = item;
|
|||
|
olvFiles.EnsureModelVisible(item);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void BtnGo_Click(object sender, EventArgs e) {
|
|||
|
string path = this.textBoxFolderPath.Text;
|
|||
|
this.PopulateListFromPath(path);
|
|||
|
GotoTreePath(path);
|
|||
|
}
|
|||
|
public void GotoTreePath(string path)
|
|||
|
{
|
|||
|
var split_path = path.Split('\\');
|
|||
|
TreeNode parent = null;
|
|||
|
for (int i = 0; i < split_path.Length; i++)
|
|||
|
{
|
|||
|
var path_item = split_path[i].ToLower();
|
|||
|
if(parent!=null)
|
|||
|
{
|
|||
|
if(parent.Nodes.Count==0)
|
|||
|
{
|
|||
|
LoadDir(parent,1);
|
|||
|
}
|
|||
|
}
|
|||
|
foreach (TreeNode item in (parent==null?TreeDir.Nodes: parent.Nodes))
|
|||
|
{
|
|||
|
var info = (MyFileSystemInfo)item.Tag;
|
|||
|
if (info.Name.Trim('\\').ToLower() == path_item)
|
|||
|
{
|
|||
|
parent = item;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if(parent!=null)
|
|||
|
{
|
|||
|
if (parent.Nodes.Count == 0)
|
|||
|
{
|
|||
|
LoadDir(parent, 1);
|
|||
|
}
|
|||
|
TreeDir.SelectedNode = parent;
|
|||
|
//TreeDir.en
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Item_menu_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
textBoxFolderPath.Text = ((ToolStripMenuItem)sender).Text;
|
|||
|
BtnGo.PerformClick();
|
|||
|
}
|
|||
|
|
|||
|
private void BtnUp_Click(object sender, EventArgs e) {
|
|||
|
DirectoryInfo di = Directory.GetParent(this.textBoxFolderPath.Text);
|
|||
|
if (di == null)
|
|||
|
System.Media.SystemSounds.Asterisk.Play();
|
|||
|
else {
|
|||
|
this.textBoxFolderPath.Text = di.FullName;
|
|||
|
|
|||
|
this.BtnGo.PerformClick();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void OlvFiles_MouseDoubleClick(object sender, MouseEventArgs e) {
|
|||
|
ClickFiles();
|
|||
|
}
|
|||
|
private void ClickFiles()
|
|||
|
{
|
|||
|
MyFileSystemInfo model = (MyFileSystemInfo)this.olvFiles.SelectedObject;
|
|||
|
if (model != null)
|
|||
|
{
|
|||
|
if (System.IO.Directory.Exists(model.FullName))
|
|||
|
{
|
|||
|
this.textBoxFolderPath.Text = model.FullName;
|
|||
|
this.BtnGo.PerformClick();
|
|||
|
return;
|
|||
|
}
|
|||
|
var ext = System.IO.Path.GetExtension(model.FullName).ToLower();
|
|||
|
if ((";.rar;.zip;.7z;.iso;.tar;.tgz;.gzip;.apk;" +
|
|||
|
".jpg;.bmp;.gif;.png;.webp;.jpeg;.tif;.tiff;.ico;.wmf;" +
|
|||
|
".mp4;.mkv;.rmvb;.flv;.3gp;.wmv;.f4v;.mpg;.mpeg;.mov;" +
|
|||
|
".mp3;.wav;.flac;.ogg;.wma;" +
|
|||
|
".xls;.xlsx;.doc;.docx;.ppt;.pptx;.csv;" +
|
|||
|
".exe;.msi;.jar;.msixbundle;").IndexOfEx(";" + ext + ";") >= 0)
|
|||
|
{
|
|||
|
RyFiles.OpenFile(model.FullName);
|
|||
|
return;
|
|||
|
}
|
|||
|
if (RyFiles.GetFileSize(model.FullName) >= 1024 * 1024 * 20)
|
|||
|
{
|
|||
|
MessageBox.Show("不支持打开超过20M的文本。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
return;
|
|||
|
}
|
|||
|
FrmMainEditor.MainEditor.OpenFile(model.FullName, false, false);
|
|||
|
}
|
|||
|
}
|
|||
|
private void TextBoxFolderPath_KeyDown(object sender, KeyEventArgs e) {
|
|||
|
if(e.KeyCode==Keys.Enter) {
|
|||
|
BtnGo.PerformClick();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void textBoxFolderPath_MouseDoubleClick(object sender, MouseEventArgs e) {
|
|||
|
folderBrowserDialog1.SelectedPath= textBoxFolderPath.Text;
|
|||
|
if (folderBrowserDialog1.ShowDialog()==DialogResult.OK) {
|
|||
|
textBoxFolderPath.Text = folderBrowserDialog1.SelectedPath;
|
|||
|
BtnGo.PerformClick();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 在资源管理器中定位该文件ToolStripMenuItem_Click(object sender, EventArgs e) {
|
|||
|
MyFileSystemInfo model = (MyFileSystemInfo)this.olvFiles.SelectedObject;
|
|||
|
if (model != null) {
|
|||
|
if (System.IO.Directory.Exists(model.FullName)) {
|
|||
|
RyFiles.OpenFile(model.FullName);
|
|||
|
return;
|
|||
|
}
|
|||
|
RyFiles.OpenFolderGotoFile(model.FullName);
|
|||
|
}
|
|||
|
}
|
|||
|
public void UpdateFileInfo(string path) {
|
|||
|
for (int i = 0; i < olvFiles.ObjectsList.Count; i++) {
|
|||
|
var item = (MyFileSystemInfo)olvFiles.ObjectsList[i];
|
|||
|
if (item.FullName.ToLower() == path.ToLower()) {
|
|||
|
item.ReLoad();
|
|||
|
olvFiles.RefreshObject(item);
|
|||
|
olvFiles.Sort();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void 上传到FTPToolStripMenuItem_Click(object sender, EventArgs e) {
|
|||
|
var list = this.olvFiles.SelectedObjects;
|
|||
|
List<UploadInfo> UploadList = new List<UploadInfo>();
|
|||
|
for (int l = 0; l < list.Count; l++)
|
|||
|
{
|
|||
|
MyFileSystemInfo model = (MyFileSystemInfo)list[l];
|
|||
|
if (model != null)
|
|||
|
{
|
|||
|
//if (System.IO.Directory.Exists(model.FullName))
|
|||
|
//{
|
|||
|
// MessageBox.Show("暂不支持上传文件夹=>" + model.FullName, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
// continue ;
|
|||
|
//}
|
|||
|
string FilePath = model.FullName;
|
|||
|
SiteInfo SiteInfo = new SiteInfo();
|
|||
|
UploadInfo uploadinfo = null;
|
|||
|
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
|
|||
|
if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1)
|
|||
|
{
|
|||
|
DataSet ds = db.ReadData("select * from Site");
|
|||
|
if (ds.HaveData())
|
|||
|
{
|
|||
|
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
|
|||
|
{
|
|||
|
DataRow reader = ds.Tables[0].Rows[i];
|
|||
|
if (FilePath.IndexOfEx(reader["localPath"].ToString()) < 0)
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
#region 读取信息
|
|||
|
SiteInfo.Name = reader["name"].ToString();
|
|||
|
SiteInfo.LocalPath = reader["localPath"].ToString();
|
|||
|
SiteInfo.FtpDir = reader["ftpDir"].ToString();
|
|||
|
SiteInfo.FtpId = reader["ftpId"].ToInt();
|
|||
|
SiteInfo.Id = reader["Id"].ToInt();
|
|||
|
break;
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|
|||
|
ds.Dispose();
|
|||
|
ds = db.ReadData("select * from Ftp where Id=" + SiteInfo.FtpId);
|
|||
|
if (ds.HaveData())
|
|||
|
{
|
|||
|
DataRow row = ds.Tables[0].Rows[0];
|
|||
|
var FtpInfo = new GameBackup3H3.DbOp.FTPInfo()
|
|||
|
{
|
|||
|
Id = row["id"].ToInt(),
|
|||
|
Name = row["name"].ToString(),
|
|||
|
IP = row["ip"].ToString(),
|
|||
|
Port = row["port"].ToInt(),
|
|||
|
RemoteDir = SiteInfo.FtpDir,
|
|||
|
UserName = row["username"].ToString(),
|
|||
|
Pwd = row["pwd"].ToString(),
|
|||
|
Encrypt = row["encrypt"].ToInt(0, 2, 0),
|
|||
|
AddTime = row["AddTime"].ToDateTime()
|
|||
|
};
|
|||
|
uploadinfo = new UploadInfo()
|
|||
|
{
|
|||
|
FtpInfo = FtpInfo,
|
|||
|
RemotePath = SiteInfo.FtpDir.Trim('/') + "/" + FilePath.Replace(SiteInfo.LocalPath, "", true).Trim('\\').Replace("\\", "/"),
|
|||
|
LocalPath = FilePath
|
|||
|
};
|
|||
|
}
|
|||
|
ds.Dispose();
|
|||
|
}
|
|||
|
db.Free();
|
|||
|
if (SiteInfo.FtpId > 0)
|
|||
|
{
|
|||
|
if (uploadinfo == null) { MessageBox.Show("没有找到对应站点信息=>" + model.FullName, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
|
|||
|
else
|
|||
|
{
|
|||
|
UploadList.Add(uploadinfo);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
MessageBox.Show("没有找到对应FTP信息=>" + model.FullName, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (UploadList.Count > 0)
|
|||
|
{
|
|||
|
FrmUploadProg frm = new FrmUploadProg();
|
|||
|
frm.UploadList.AddRange(UploadList);
|
|||
|
if (frm.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
//MessageBox.Show("上传成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
MessageBox.Show("上传失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
frm.Dispose();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 复制文件名ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var list = this.olvFiles.SelectedObjects;
|
|||
|
if (list.Count>0)
|
|||
|
{
|
|||
|
var text = "";
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[i];
|
|||
|
if (text.Length > 0) { text += "\r\n"; }
|
|||
|
text += row.Name;
|
|||
|
}
|
|||
|
RyFiles.CopyToClip(text);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 重命名ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
MyFileSystemInfo model = (MyFileSystemInfo)this.olvFiles.SelectedObject;
|
|||
|
if (model == null) { return; }
|
|||
|
FrmTitle frm = new FrmTitle();
|
|||
|
frm.Text = "请输入重命名的名称";
|
|||
|
frm.TxtTitle.Text = model.Name;
|
|||
|
if (frm.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
//int num = arrayList2.IndexOf(model);
|
|||
|
var new_fullname = System.IO.Path.GetDirectoryName(model.FullName) + "\\" + RyFiles.ConvertToValidFileName(frm.TxtTitle.Text);
|
|||
|
if (RyFiles.MoveFile(model.FullName, new_fullname) == 0)
|
|||
|
{
|
|||
|
//treeListView.RemoveObject(model);
|
|||
|
model.ReLoad(new_fullname);
|
|||
|
model.Name = model.Name;
|
|||
|
olvFiles.RefreshObject(model);
|
|||
|
UpdateNode(TreeDir.SelectedNode);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
MessageBox.Show("重命名失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|||
|
}
|
|||
|
}
|
|||
|
frm.Dispose();
|
|||
|
}
|
|||
|
|
|||
|
private void 删除文件ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var list = this.olvFiles.SelectedObjects;
|
|||
|
if (list.Count > 0)
|
|||
|
{
|
|||
|
switch (MessageBox.Show("确定要删除选定的"+ list.Count + "个文件吗?这将不可恢复?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2))
|
|||
|
{
|
|||
|
case DialogResult.No:
|
|||
|
return;
|
|||
|
}
|
|||
|
//var del_list=new List<MyFileSystemInfo>();
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[i];
|
|||
|
RyFiles.DeleteFile(row.FullName);
|
|||
|
//del_list.Add(row);
|
|||
|
}
|
|||
|
UpdateNode(TreeDir.SelectedNode);
|
|||
|
//olvFiles.RemoveObjects(del_list);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
|
|||
|
{
|
|||
|
var list = this.olvFiles.SelectedObjects;
|
|||
|
删除文件ToolStripMenuItem.Enabled = list.Count > 0;
|
|||
|
重命名ToolStripMenuItem.Enabled = list.Count==1;
|
|||
|
在资源管理器中定位该文件ToolStripMenuItem.Enabled = list.Count == 1;
|
|||
|
复制文件名ToolStripMenuItem.Enabled = list.Count > 0;
|
|||
|
复制ToolStripMenuItem.Enabled = list.Count > 0;
|
|||
|
剪切ToolStripMenuItem.Enabled = list.Count > 0;
|
|||
|
粘贴ToolStripMenuItem.Enabled = copy_or_cut_list.Count > 0;
|
|||
|
try
|
|||
|
{
|
|||
|
粘贴剪切板文件列表ToolStripMenuItem.Enabled = Clipboard.GetFileDropList().Count > 0;
|
|||
|
}
|
|||
|
catch { }
|
|||
|
}
|
|||
|
private void UpdateNode(TreeNode node)
|
|||
|
{
|
|||
|
if(node == null) return;
|
|||
|
var parent_info = (MyFileSystemInfo)node.Tag;
|
|||
|
var dirs = parent_info.AsDirectory.GetDirectories();
|
|||
|
Dictionary<string, int> dict = new Dictionary<string, int>();
|
|||
|
Dictionary<string, int> dict_now = new Dictionary<string, int>();
|
|||
|
for (int i = 0; i < dirs.Length; i++)
|
|||
|
{
|
|||
|
dict[dirs[i].FullName] = 1;
|
|||
|
}
|
|||
|
for (int i = node.Nodes.Count-1; i>=0; i--)
|
|||
|
{
|
|||
|
var info = node.Nodes[i].Tag as MyFileSystemInfo;
|
|||
|
if(!dict.ContainsKey(info.FullName))
|
|||
|
{
|
|||
|
node.Nodes[i].Remove();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
dict_now[info.FullName] = 1;
|
|||
|
}
|
|||
|
}
|
|||
|
for (int i = 0; i < dirs.Length; i++)
|
|||
|
{
|
|||
|
if (!dict_now.ContainsKey(dirs[i].FullName))
|
|||
|
{
|
|||
|
MyFileSystemInfo info = new MyFileSystemInfo(dirs[i], "");
|
|||
|
var node2 = new TreeNode(dirs[i].Name)
|
|||
|
{
|
|||
|
ImageIndex = helper_tree.GetImageIndex(dirs[i].FullName)
|
|||
|
};
|
|||
|
node2.SelectedImageIndex = node.ImageIndex;
|
|||
|
node2.Tag = info;
|
|||
|
node.Nodes.Add(node2);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private void 新建文件夹ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
FrmTitle frm = new FrmTitle();
|
|||
|
frm.Text = "请输入重命名的名称";
|
|||
|
frm.TxtTitle.Text = "新建文件夹";
|
|||
|
if (frm.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
var path = CurFolderPath + "\\" + frm.TxtTitle.Text;
|
|||
|
if (System.IO.Directory.Exists(path))
|
|||
|
{
|
|||
|
MessageBox.Show("文件夹已存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
RyFiles.CreateDirectory(path);
|
|||
|
|
|||
|
var node = TreeDir.SelectedNode;
|
|||
|
if(node!=null)
|
|||
|
{
|
|||
|
var info = (MyFileSystemInfo)node.Tag;
|
|||
|
if(info.FullName.ToLower()== CurFolderPath.ToLower())
|
|||
|
{
|
|||
|
UpdateNode(node);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
frm.Dispose();
|
|||
|
}
|
|||
|
|
|||
|
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
System.Collections.Specialized.StringCollection list = new System.Collections.Specialized.StringCollection();
|
|||
|
for (int i = 0; i < this.olvFiles.SelectedObjects.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)this.olvFiles.SelectedObjects[i];
|
|||
|
list.Add(row.FullName);
|
|||
|
}
|
|||
|
DataObject data = new DataObject();
|
|||
|
data.SetData("Preferred DropEffect", "COPY");
|
|||
|
data.SetFileDropList(list);
|
|||
|
Clipboard.SetDataObject(data);
|
|||
|
}
|
|||
|
|
|||
|
private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var error = 0;
|
|||
|
var item = (MyFileSystemInfo)olvFiles.SelectedObject;
|
|||
|
var exist_mode = -1000;
|
|||
|
for (int i = 0; i< copy_or_cut_list.Count;i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)copy_or_cut_list[i];
|
|||
|
var to_name=CurFolderPath + "\\" + row.Name;
|
|||
|
if(item!=null && item.IsDirectory)
|
|||
|
{
|
|||
|
to_name= item.FullName+ "\\" + row.Name;
|
|||
|
}
|
|||
|
if(!RyFiles.FileOrDirExist(to_name))
|
|||
|
{
|
|||
|
if (CopyMode)
|
|||
|
{
|
|||
|
if(RyFiles.CopyFileOrFolder(row.FullName, to_name) != 0) { error++; }
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(RyFiles.MoveFile(row.FullName, to_name)!=0) { error++; }
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (exist_mode == -1000)
|
|||
|
{
|
|||
|
switch (MessageBox.Show("文件已存在,需要如何处理?\r\n是:替换文件\r\n否:拷贝一份副本\r\n取消:忽略", "询问", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly))
|
|||
|
{
|
|||
|
case DialogResult.Cancel:
|
|||
|
exist_mode = 0;
|
|||
|
break;
|
|||
|
case DialogResult.No:
|
|||
|
exist_mode = -1;
|
|||
|
break;
|
|||
|
case DialogResult.Yes:
|
|||
|
exist_mode = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (exist_mode == 0)
|
|||
|
{
|
|||
|
error++;
|
|||
|
}
|
|||
|
else if (exist_mode == -1)
|
|||
|
{
|
|||
|
var index = 1;
|
|||
|
while(true)
|
|||
|
{
|
|||
|
var path = System.IO.Path.GetDirectoryName(to_name) + System.IO.Path.GetFileNameWithoutExtension(to_name) + "_副本" + index + System.IO.Path.GetExtension(to_name);
|
|||
|
if (!RyFiles.FileOrDirExist(path))
|
|||
|
{
|
|||
|
to_name = path;
|
|||
|
break;
|
|||
|
}
|
|||
|
index++;
|
|||
|
}
|
|||
|
if (CopyMode)
|
|||
|
{
|
|||
|
if (RyFiles.CopyFileOrFolder(row.FullName, to_name) != 0) { error++; }
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (RyFiles.MoveFile(row.FullName, to_name) != 0) { error++; }
|
|||
|
}
|
|||
|
}
|
|||
|
else if (exist_mode == 1)//替换文件
|
|||
|
{
|
|||
|
if (row.FullName != to_name)
|
|||
|
{
|
|||
|
if (CopyMode)
|
|||
|
{
|
|||
|
if (RyFiles.CopyFileOrFolder(row.FullName, to_name) != 0) { error++; }
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (RyFiles.MoveFile(row.FullName, to_name) != 0) { error++; }
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (item != null && item.IsDirectory)
|
|||
|
{
|
|||
|
olvFiles.RemoveObjects(copy_or_cut_list);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
olvFiles.AddObjects(copy_or_cut_list);
|
|||
|
}
|
|||
|
UpdateNode(TreeDir.SelectedNode);
|
|||
|
if (error>0)
|
|||
|
{
|
|||
|
MessageBox.Show("粘贴出现错误,总文件数"+copy_or_cut_list.Count+"项,共有" + error+"项错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
System.Collections.Specialized.StringCollection list = new System.Collections.Specialized.StringCollection();
|
|||
|
for (int i = 0; i < this.olvFiles.SelectedObjects.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)this.olvFiles.SelectedObjects[i];
|
|||
|
list.Add(row.FullName);
|
|||
|
}
|
|||
|
DataObject data = new DataObject();
|
|||
|
data.SetData("Preferred DropEffect", "MOVE");
|
|||
|
data.SetFileDropList(list);
|
|||
|
Clipboard.SetDataObject(data);
|
|||
|
}
|
|||
|
|
|||
|
private void OlvFiles_CellEditFinished(object sender, CellEditEventArgs e)
|
|||
|
{
|
|||
|
if(!e.Cancel)
|
|||
|
{
|
|||
|
var item = (MyFileSystemInfo)e.RowObject;
|
|||
|
if(RyFiles.IsValidFileName(e.NewValue.ToString()))
|
|||
|
{
|
|||
|
var new_path = System.IO.Path.GetDirectoryName(item.FullName) + "\\" + e.NewValue.ToString();
|
|||
|
if(RyFiles.MoveFile(item.FullName, new_path)==0)
|
|||
|
{
|
|||
|
item.ReLoad(new_path);
|
|||
|
olvFiles.RefreshObject(item);
|
|||
|
UpdateNode(TreeDir.SelectedNode);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 刷新文件夹ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (TreeDir.SelectedNode == null) { return; }
|
|||
|
TreeDir.SelectedNode.Nodes.Clear();
|
|||
|
LoadDir(TreeDir.SelectedNode, 0);
|
|||
|
}
|
|||
|
|
|||
|
private void FrmFileBrowser_New_Shown(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if(TreeDir.Nodes.Count==0)
|
|||
|
{
|
|||
|
LoadDir(null, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void TreeDir_MouseDown(object sender, MouseEventArgs e)
|
|||
|
{
|
|||
|
if(e.Button== MouseButtons.Right)
|
|||
|
{
|
|||
|
var node= TreeDir.GetNodeAt(e.Location);
|
|||
|
if (node != null) { TreeDir.SelectedNode = node; }
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 在资源管理器中打开该文件夹ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (TreeDir.SelectedNode == null) { return; }
|
|||
|
var info = (MyFileSystemInfo)TreeDir.SelectedNode.Tag;
|
|||
|
RyFiles.OpenFile(info.FullName);
|
|||
|
}
|
|||
|
|
|||
|
private void 资源管理器菜单ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (TreeDir.SelectedNode == null) { return; }
|
|||
|
var info = (MyFileSystemInfo)TreeDir.SelectedNode.Tag;
|
|||
|
using (CShellFolder sf = new CShellFolder())
|
|||
|
{
|
|||
|
sf.ShowMenu(info.FullName, MousePosition, Handle);
|
|||
|
UpdateNode(TreeDir.SelectedNode);
|
|||
|
}
|
|||
|
}
|
|||
|
readonly bool procUse = false;
|
|||
|
private void TxtSearch_TextChanged2(object sender, EventArgs e)
|
|||
|
{
|
|||
|
TimedFilter(this.olvFiles, ((ryControls.TextBoxEx2)sender).Text, this.CbbMatch.SelectedIndex);
|
|||
|
}
|
|||
|
public void TimedFilter(BrightIdeasSoftware.ObjectListView olv, string txt, int matchKind)
|
|||
|
{
|
|||
|
BrightIdeasSoftware.TextMatchFilter filter = null;
|
|||
|
if (!String.IsNullOrEmpty(txt))
|
|||
|
{
|
|||
|
switch (matchKind)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
default:
|
|||
|
filter = BrightIdeasSoftware.TextMatchFilter.Contains(olv, txt);
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
filter = BrightIdeasSoftware.TextMatchFilter.Prefix(olv, txt);
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
filter = BrightIdeasSoftware.TextMatchFilter.Regex(olv, txt);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Text highlighting requires at least a default renderer
|
|||
|
if (olv.DefaultRenderer == null)
|
|||
|
olv.DefaultRenderer = new BrightIdeasSoftware.HighlightTextRenderer(filter);
|
|||
|
|
|||
|
Stopwatch stopWatch = new Stopwatch();
|
|||
|
stopWatch.Start();
|
|||
|
olv.AdditionalFilter = filter;
|
|||
|
//olv.Invalidate();
|
|||
|
stopWatch.Stop();
|
|||
|
}
|
|||
|
|
|||
|
private void CbbMatch_SelectedIndexChanged(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (procUse) { return; }
|
|||
|
TimedFilter(this.olvFiles, TxtSearch.Text, this.CbbMatch.SelectedIndex);
|
|||
|
}
|
|||
|
|
|||
|
private void BtnGo_MouseDown(object sender, MouseEventArgs e)
|
|||
|
{
|
|||
|
if(e.Button == MouseButtons.Right) {
|
|||
|
Button btn = (Button)sender;
|
|||
|
Point p = new Point(0, btn.Height);
|
|||
|
MenuDirHistory.Show(btn, p);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 粘贴剪切板文件列表ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var data = Clipboard.GetDataObject();
|
|||
|
if (data.GetDataPresent(DataFormats.FileDrop, true))
|
|||
|
{
|
|||
|
var isCut = false;
|
|||
|
try
|
|||
|
{
|
|||
|
MemoryStream vMemoryStream = (MemoryStream)data.GetData( "Preferred DropEffect", true);
|
|||
|
if (vMemoryStream != null)
|
|||
|
{
|
|||
|
DragDropEffects vDragDropEffects = (DragDropEffects)vMemoryStream.ReadByte();
|
|||
|
if ((vDragDropEffects & DragDropEffects.Move) == DragDropEffects.Move)
|
|||
|
{
|
|||
|
isCut = true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch { }
|
|||
|
string[] files = (string[])data.GetData(DataFormats.FileDrop);
|
|||
|
if (files.Length > 0)
|
|||
|
{
|
|||
|
var error = 0;
|
|||
|
var exist_mode = -1000;
|
|||
|
for (int i = 0; i < files.Length; i++)
|
|||
|
{
|
|||
|
var to_name = CurFolderPath + "\\" + System.IO.Path.GetFileName(files[i]);
|
|||
|
var isDir = System.IO.Directory.Exists(files[i]);
|
|||
|
if (isDir)
|
|||
|
{
|
|||
|
if (RyFiles.FileOrDirExist(to_name))
|
|||
|
{
|
|||
|
if (to_name == files[i])
|
|||
|
{
|
|||
|
to_name = GetNewPath(files[i]);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (exist_mode == -1000)
|
|||
|
{
|
|||
|
switch (MessageBox.Show("文件已存在,需要如何处理?\r\n是:替换文件\r\n否:拷贝一份副本\r\n取消:忽略", "询问", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly))
|
|||
|
{
|
|||
|
case DialogResult.Cancel:
|
|||
|
exist_mode = 0;
|
|||
|
break;
|
|||
|
case DialogResult.No:
|
|||
|
exist_mode = -1;
|
|||
|
break;
|
|||
|
case DialogResult.Yes:
|
|||
|
exist_mode = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (exist_mode == 0)
|
|||
|
{
|
|||
|
error++;
|
|||
|
}
|
|||
|
else if (exist_mode ==-1)
|
|||
|
{
|
|||
|
to_name = GetNewPath(files[i]);
|
|||
|
}
|
|||
|
else if (exist_mode == 1)//替换文件
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (RyFiles.FileOrDirExist(to_name))
|
|||
|
{
|
|||
|
if (to_name == files[i])
|
|||
|
{
|
|||
|
to_name = GetNewPath(files[i]);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (exist_mode == -1000)
|
|||
|
{
|
|||
|
switch (MessageBox.Show("文件已存在,需要如何处理?\r\n是:替换文件\r\n否:拷贝一份副本\r\n取消:忽略", "询问", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly))
|
|||
|
{
|
|||
|
case DialogResult.Cancel:
|
|||
|
exist_mode = 0;
|
|||
|
break;
|
|||
|
case DialogResult.No:
|
|||
|
exist_mode = -1;
|
|||
|
break;
|
|||
|
case DialogResult.Yes:
|
|||
|
exist_mode = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
if (exist_mode == 0)
|
|||
|
{
|
|||
|
error++;
|
|||
|
}
|
|||
|
else if (exist_mode == -1)
|
|||
|
{
|
|||
|
to_name = GetNewPath(files[i]);
|
|||
|
}
|
|||
|
else if (exist_mode == 1)//替换文件
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
string GetNewPath(string fromPath)
|
|||
|
{
|
|||
|
var filename = System.IO.Path.GetFileNameWithoutExtension(fromPath);
|
|||
|
var ext = System.IO.Path.GetExtension(fromPath);
|
|||
|
string path;
|
|||
|
var index = 1;
|
|||
|
while (true)
|
|||
|
{
|
|||
|
path = CurFolderPath + "\\" + filename + "_副本" + index + ext;
|
|||
|
if (RyFiles.FileOrDirExist(path))
|
|||
|
{
|
|||
|
index++;
|
|||
|
}
|
|||
|
else { break; }
|
|||
|
}
|
|||
|
return path;
|
|||
|
}
|
|||
|
if (isCut)//表示移动文件
|
|||
|
{
|
|||
|
if (files[i] != to_name)
|
|||
|
{
|
|||
|
if (RyFiles.MoveFile(files[i], to_name) != 0) { error++; }
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (RyFiles.CopyFileOrFolder(files[i], to_name) != 0) { error++; }
|
|||
|
else
|
|||
|
{
|
|||
|
if(!System.IO.Directory.Exists(to_name) && System.IO.Directory.Exists(files[i]))
|
|||
|
{
|
|||
|
RyFiles.CreateDirectory(to_name);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (error > 0)
|
|||
|
{
|
|||
|
MessageBox.Show("粘贴出现错误,总文件数" + files.Length + "项,共有" + error + "项错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
}
|
|||
|
//BtnGo.PerformClick();
|
|||
|
}
|
|||
|
if(isCut)
|
|||
|
{
|
|||
|
Clipboard.Clear();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void FileSystemWatcher1_Created(object sender, FileSystemEventArgs e)
|
|||
|
{
|
|||
|
if (System.IO.File.Exists(e.FullPath))
|
|||
|
{
|
|||
|
olvFiles.AddObject(new MyFileSystemInfo(new FileInfo(e.FullPath), ""));
|
|||
|
}
|
|||
|
else if (System.IO.Directory.Exists(e.FullPath))
|
|||
|
{
|
|||
|
olvFiles.AddObject(new MyFileSystemInfo(new DirectoryInfo(e.FullPath), ""));
|
|||
|
}
|
|||
|
olvColumnName.Text = "文件名(" + olvFiles.GetItemCount() + ")";
|
|||
|
}
|
|||
|
|
|||
|
private void FileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e)
|
|||
|
{
|
|||
|
var list = olvFiles.ObjectsList;
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[i];
|
|||
|
if(row.FullName==e.FullPath)
|
|||
|
{
|
|||
|
olvFiles.RemoveObject(row);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
olvColumnName.Text = "文件名(" + olvFiles.GetItemCount() + ")";
|
|||
|
}
|
|||
|
|
|||
|
private void FileSystemWatcher1_Renamed(object sender, RenamedEventArgs e)
|
|||
|
{
|
|||
|
var list = olvFiles.ObjectsList;
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[i];
|
|||
|
if (row.FullName == e.OldFullPath)
|
|||
|
{
|
|||
|
row.ReLoad(e.FullPath);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void FileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
|
|||
|
{
|
|||
|
if(e.ChangeType== WatcherChangeTypes.Changed)
|
|||
|
{
|
|||
|
var list = olvFiles.ObjectsList;
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[i];
|
|||
|
if (row.FullName == e.FullPath)
|
|||
|
{
|
|||
|
row.ReLoad(e.FullPath);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void OlvFiles_KeyDown(object sender, KeyEventArgs e)
|
|||
|
{
|
|||
|
if(e.KeyCode==Keys.V && e.Control)
|
|||
|
{
|
|||
|
粘贴剪切板文件列表ToolStripMenuItem.PerformClick();
|
|||
|
}
|
|||
|
else if (e.KeyCode == Keys.C && e.Control)
|
|||
|
{
|
|||
|
复制ToolStripMenuItem.PerformClick();
|
|||
|
}
|
|||
|
else if (e.KeyCode == Keys.S && e.Control)
|
|||
|
{
|
|||
|
剪切ToolStripMenuItem.PerformClick();
|
|||
|
}
|
|||
|
else if (e.KeyCode == Keys.Enter)
|
|||
|
{
|
|||
|
ClickFiles();
|
|||
|
}
|
|||
|
else if (e.KeyCode == Keys.Back)
|
|||
|
{
|
|||
|
var folder = CurFolderPath.ToLower();
|
|||
|
olvFiles.Enabled = false;
|
|||
|
BtnUp.PerformClick();
|
|||
|
olvFiles.Enabled = true;
|
|||
|
olvFiles.Focus();
|
|||
|
var list = olvFiles.ObjectsList;
|
|||
|
for (int i = 0; i < list.Count; i++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[i];
|
|||
|
if (row.FullName.ToLower() == folder)
|
|||
|
{
|
|||
|
olvFiles.SelectedObject = row;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (e.KeyCode == Keys.Delete)
|
|||
|
{
|
|||
|
删除文件ToolStripMenuItem.PerformClick();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void 复制文件到其它站点同位置ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
var list = this.olvFiles.SelectedObjects;
|
|||
|
if (list.Count > 0)
|
|||
|
{
|
|||
|
switch (MessageBox.Show("确定要复制" + list.Count + "个文件到其它站点相同位置吗?如果目标文件已经存在,将覆盖文件,这将不可恢复?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2))
|
|||
|
{
|
|||
|
case DialogResult.No:
|
|||
|
return;
|
|||
|
}
|
|||
|
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
|
|||
|
if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1)
|
|||
|
{
|
|||
|
DataSet ds = db.ReadData("select * from Site");
|
|||
|
if (ds.HaveData())
|
|||
|
{
|
|||
|
for (int m = 0; m < list.Count; m++)
|
|||
|
{
|
|||
|
var row = (MyFileSystemInfo)list[m];
|
|||
|
var xd_path = "";
|
|||
|
var cur_Id = -1;
|
|||
|
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
|
|||
|
{
|
|||
|
DataRow reader = ds.Tables[0].Rows[i];
|
|||
|
if (row.FullName.IndexOfEx(reader["localPath"].ToString()) < 0)
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
xd_path = row.FullName.Replace(reader["localPath"].ToString(), "", true).Trim('\\');
|
|||
|
cur_Id = reader["id"].ToInt();
|
|||
|
break;
|
|||
|
}
|
|||
|
if (cur_Id == -1)
|
|||
|
{
|
|||
|
MessageBox.Show("当前选定的文件无法获取站点信息。", "无法获取站点", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
|
|||
|
{
|
|||
|
DataRow reader = ds.Tables[0].Rows[i];
|
|||
|
if (cur_Id == reader["id"].ToInt()) { continue; }
|
|||
|
if (System.IO.File.Exists(reader["localPath"].ToString() + "\\" + xd_path))
|
|||
|
{
|
|||
|
//如果已存在,则先进行备份
|
|||
|
RyFiles.DeleteFile(reader["localPath"].ToString() + "\\" + xd_path, true);
|
|||
|
}
|
|||
|
if (!RyFiles.CopyBigFile(row.FullName, reader["localPath"].ToString() + "\\" + xd_path))
|
|||
|
{
|
|||
|
MessageBox.Show("复制到以下位置出错\r\n" + reader["localPath"].ToString() + "\\" + xd_path, "复制出错", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
ds?.Dispose();
|
|||
|
}
|
|||
|
db.Free();
|
|||
|
UpdateNode(TreeDir.SelectedNode);
|
|||
|
//olvFiles.RemoveObjects(del_list);
|
|||
|
}
|
|||
|
}
|
|||
|
//private void FileSystemWatcher1_Created(object sender, FileSystemEventArgs e)
|
|||
|
//{
|
|||
|
// if(CurFolderPath.Length>0 && e.FullPath.IndexOfEx(CurFolderPath)>=0)
|
|||
|
// {
|
|||
|
// UpdateNode(TreeDir.SelectedNode);
|
|||
|
// }
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|