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);
|
|
}
|
|
}
|
|
}
|