229 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			229 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Data;
 | |
| using System.Drawing;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace FCOMMON
 | |
| {
 | |
|     public partial class fFTPExplorer : fBase
 | |
|     {
 | |
|         string homePath = string.Empty;
 | |
|         string curPath = string.Empty;
 | |
|         arUtil.FTPClient.FTPClient ftp;
 | |
|         string fn = "ftpExplorer.ini";
 | |
|         public fFTPExplorer(string title,string path,string ip,string id,string pw,int port=21,Boolean passvie=true)
 | |
|         {
 | |
|             InitializeComponent();
 | |
|             this.Text = string.Format("[FTP] {0}",title);
 | |
|             this.KeyPreview = true;
 | |
|             this.KeyDown += (s1, e1) => {
 | |
|                 if (e1.KeyCode == Keys.Escape) this.Close();
 | |
|             };
 | |
|             this.listView1.DoubleClick += listView1_DoubleClick;
 | |
|             this.tbpath.KeyDown += (s1, e1) => {
 | |
|                 if (e1.KeyCode == Keys.Enter)
 | |
|                     btQuery.PerformClick();
 | |
|             };
 | |
|             this.FormClosed += __Closed;
 | |
|             ftp = new arUtil.FTPClient.FTPClient(ip, id, pw, port, passvie);
 | |
|             curPath = path;
 | |
|             homePath = path;
 | |
| 
 | |
|             //홈폴더가 없으면 생성을 한다.
 | |
|             var list = ftp.directoryListSimple(homePath);
 | |
|             if(list.Length == 1)
 | |
|             {
 | |
|                 //폴더를 생성해준다.
 | |
|                 ftp.createDirectory(homePath);
 | |
| 
 | |
|                 //하위폴더
 | |
|                 string[] subdir = new string[] { "Source","Document","Draw"};
 | |
|                 foreach (var dir in subdir)
 | |
|                     ftp.createDirectory(ftp.PathCombine(homePath, dir));
 | |
|             }
 | |
| 
 | |
|             this.listView1.DragDrop += listView1_DragDrop;
 | |
|             this.listView1.DragEnter += listView1_DragEnter;
 | |
|             this.listView1.DragOver += listView1_DragOver;
 | |
|         }
 | |
| 
 | |
|         void __Closed(object sender, FormClosedEventArgs e)
 | |
|         {
 | |
|             //listview column width
 | |
| 
 | |
|             arUtil.INIHelper ini = new arUtil.INIHelper(fn);
 | |
|             for (int i = 0; i < this.listView1.Columns.Count; i++)
 | |
|             {
 | |
|                 var curwidth = this.listView1.Columns[i].Width;
 | |
|                 ini.set_Data("colsize", "index_" + i.ToString(), curwidth.ToString());
 | |
|             }
 | |
|             ini.Flush();
 | |
| 
 | |
|             //string item = "ftp_lv_col_";
 | |
|             //for (int i = 0; i < this.listView1.Columns.Count; i++)
 | |
|             //{
 | |
|             //    var curwidth =  this.listView1.Columns[i].Width;
 | |
|             //    Pub.setting.Xml.set_Data(item + i.ToString(),curwidth.ToString());
 | |
|             //}
 | |
|             //Pub.setting.Save();
 | |
|         }
 | |
| 
 | |
|         private void __Load(object sender, EventArgs e)
 | |
|         {
 | |
|             EnsureVisibleAndUsableSize();
 | |
|             this.tbpath.Text = this.curPath;// Pub.setting.ftp_path;
 | |
|             if (this.tbpath.Text == "") tbpath.Text = "/";
 | |
|             timer1.Start();
 | |
| 
 | |
|             //listview column width
 | |
|             //string item = "ftp_lv_col_";
 | |
| 
 | |
|             if (System.IO.File.Exists(fn) == false) return;
 | |
|             arUtil.INIHelper ini = new arUtil.INIHelper(fn);
 | |
|             for (int i = 0; i < this.listView1.Columns.Count; i++)
 | |
|             {
 | |
|                 var cwid = ini.get_Data("colsize", "index_" + i.ToString(), "0");
 | |
|                 this.listView1.Columns[i].Width = int.Parse(cwid);
 | |
|             }
 | |
|             btQuery.PerformClick();
 | |
|         }
 | |
|     
 | |
|         void listView1_DragOver(object sender, DragEventArgs e)
 | |
|         {
 | |
|             this.Cursor = Cursors.Hand;
 | |
|         }
 | |
| 
 | |
|         void listView1_DragEnter(object sender, DragEventArgs e)
 | |
|         {
 | |
|             e.Effect = DragDropEffects.All;
 | |
|         }
 | |
| 
 | |
|         void listView1_DragDrop(object sender, DragEventArgs e)
 | |
|         {
 | |
|             string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
 | |
|             if (files.Length < 1) return;
 | |
|             string msg = string.Format("{0}건의 파일을 업로드 하시겠습니까?",files.Length);
 | |
|             if (FCOMMON.Util.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return;
 | |
|             foreach(var fileName in files)
 | |
|             {
 | |
|                 System.IO.FileInfo fi = new System.IO.FileInfo(fileName);
 | |
|                 string remote = tbpath.Text      + "/" + fi.Name;
 | |
|                 ftp.Upload(remote, fi.FullName);
 | |
|             }
 | |
|             btQuery.PerformClick();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         void listView1_DoubleClick(object sender, EventArgs e)
 | |
|         {
 | |
|             var path = listView1.SelectedItems[0].Text;
 | |
|             var newpath = string.Empty;
 | |
|             if (path == "..")
 | |
|             {
 | |
|                 if( this.homePath.Replace("/","") == curPath.Replace("/",""))
 | |
|                 {
 | |
|                     FCOMMON.Util.MsgE("홈 디렉토리 입니다.");
 | |
|                     return;
 | |
|                 } else  newpath = ftp.getParent(curPath);
 | |
|             }   
 | |
|             else
 | |
|                 newpath = ftp.PathCombine(curPath, path);
 | |
| 
 | |
|             search(newpath);
 | |
|         }
 | |
| 
 | |
|        
 | |
|         private void button1_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             if (this.tbpath.Text == "/") this.tbpath.Text = homePath;
 | |
|             search(this.tbpath.Text);
 | |
|             tbpath.Focus();
 | |
|             tbpath.SelectAll();
 | |
|         }
 | |
| 
 | |
|         void search(string path)
 | |
|         {
 | |
|             if (path == "") path = "/";
 | |
|             curPath = path;
 | |
|             tbpath.Text = curPath;
 | |
| 
 | |
|             this.listView1.Items.Clear();
 | |
|             this.progressBar1.Value = 0;
 | |
| 
 | |
| 
 | |
|            // var list = ftp.directoryListSimple("/201");
 | |
| 
 | |
|             var lvup = listView1.Items.Add("..");
 | |
|             lvup.SubItems.Add("");
 | |
|             lvup.SubItems.Add("");
 | |
|             lvup.SubItems.Add("");
 | |
| 
 | |
| 
 | |
|             var ftpdir = ftp.ListDirectoryDetail(path);
 | |
|             if(ftpdir == null)
 | |
|             {
 | |
|                 //Util.MsgE(ftp.errorMessage);
 | |
|                 return;
 | |
|             }
 | |
|           
 | |
|             this.progressBar1.Maximum = ftpdir.Count;
 | |
|             var OrderData = ftpdir.OrderBy(t => t.FileType).OrderBy(t=>t.Filename);
 | |
|            
 | |
|             foreach (var item in OrderData)
 | |
|             {
 | |
|                 this.progressBar1.Value += 1;
 | |
|                 if (item.Filename == ".") continue;
 | |
|                 var lv = listView1.Items.Add(item.Filename);
 | |
|                 lv.SubItems.Add(item.FileType.ToString());
 | |
|                 lv.SubItems.Add(item.Size.ToString());
 | |
|                 lv.SubItems.Add(item.FileDateTime.ToString());
 | |
|                 if (item.FileType ==  arUtil.FTPClient.FTPfileInfo.DirectoryEntryTypes.Directory) lv.ForeColor = Color.Blue;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void timer1_Tick(object sender, EventArgs e)
 | |
|         {
 | |
|             this.lbPath.Text = curPath;
 | |
|         }
 | |
| 
 | |
|         private void uploadToolStripMenuItem_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             OpenFileDialog od = new OpenFileDialog();
 | |
|             if (od.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
 | |
|             //이파일을 현재 위치에 업로드 한다.
 | |
|             System.IO.FileInfo fi = new System.IO.FileInfo(od.FileName);
 | |
|             string newfile = ftp.PathFileCombine(curPath, fi.Name);
 | |
|             if (!ftp.Upload(newfile, od.FileName))
 | |
|                 Util.MsgE("upload error");
 | |
|             search(curPath);
 | |
|         }
 | |
| 
 | |
|         private void downLoadToolStripMenuItem_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             if (this.listView1.SelectedItems.Count < 1) return;
 | |
| 
 | |
|             //이파일을 현재 위치에 업로드 한다.
 | |
|             var selfile = this.listView1.SelectedItems[0];
 | |
|             var remotefile = ftp.PathFileCombine(curPath, selfile.Text);
 | |
|             var onlyfilename = remotefile.Substring(remotefile.LastIndexOf("/")+1);
 | |
|                         
 | |
|             SaveFileDialog od = new SaveFileDialog();
 | |
|             od.Filter = "All files|*.*";
 | |
|             od.FilterIndex = 1;
 | |
|             od.FileName = onlyfilename;
 | |
|             
 | |
|             if (od.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
 | |
|             
 | |
|             System.IO.FileInfo fi = new System.IO.FileInfo(od.FileName);
 | |
|             string newfile = ftp.PathFileCombine(curPath, fi.Name);
 | |
|             if (!ftp.Download(remotefile,od.FileName))
 | |
|                 Util.MsgE("Download error");
 | |
|             search(curPath);
 | |
|         }
 | |
|     }
 | |
| }
 | 
