184 lines
7.2 KiB
VB.net
184 lines
7.2 KiB
VB.net
|
|
Public Class fFtpPath
|
|
|
|
Public Selpath As String = ""
|
|
Private ftpindex As Integer = 0
|
|
|
|
Public Sub New(_host As String, _id As String, _pw As String, _port As Integer,
|
|
_passive As Boolean, _utf8 As Boolean, _
|
|
_BasePath As String)
|
|
|
|
' 이 호출은 디자이너에 필요합니다.
|
|
InitializeComponent()
|
|
|
|
tb_ftpid.Text = _id
|
|
tb_ftppass.Text = _pw
|
|
tb_ftpport.Text = _port.ToString()
|
|
tb_ftpserver.Text = _host
|
|
chk_ftpPassive.Checked = _passive
|
|
chk_ftputf8.Checked = _utf8
|
|
|
|
If String.IsNullOrEmpty(_BasePath) Then _BasePath = "/"
|
|
_BasePath = _BasePath.Replace("\\", "\").Replace("//", "/")
|
|
tb_ftppath.Text = _BasePath
|
|
|
|
' InitializeComponent() 호출 뒤에 초기화 코드를 추가하십시오.
|
|
End Sub
|
|
|
|
|
|
Private Sub fFtpPath_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Me.Text = "(원본)FTP경로선택"
|
|
Me.Show()
|
|
My.Application.DoEvents()
|
|
|
|
'RefreshFile(tb_ftppath.Text)
|
|
End Sub
|
|
|
|
Private Sub RefreshFile(dir As String)
|
|
If String.IsNullOrEmpty(dir) Then
|
|
dir = "/"
|
|
End If
|
|
|
|
btFtpSearch.Enabled = False
|
|
btFtpSearch.Refresh()
|
|
tb_ftppath.Text = dir
|
|
lv_ftpde.Items.Clear()
|
|
|
|
'//최상위가 아니라면 상위폴더이동을 추가해준다.
|
|
If dir <> "/" Then
|
|
Dim lvitem As ListViewItem = Me.lv_ftpde.Items.Add("..")
|
|
lvitem.ForeColor = Color.DarkMagenta
|
|
End If
|
|
|
|
'//검출된데이터의 갯수
|
|
Dim dataCount As UInteger = 0
|
|
|
|
'//라이브러리종류별로 데이터를 조회한다.
|
|
Dim isErr As Boolean = False
|
|
Dim ErrMsg As String = ""
|
|
FTP_0.CurrentDirectory = dir
|
|
|
|
Dim ftpdir As FTPClients.FTPdirectory
|
|
|
|
Try
|
|
ftpdir = FTP_0.ListDirectoryDetail(dir)
|
|
For Each info As FTPClients.FTPfileInfo In ftpdir.GetDirectories
|
|
dataCount += 1
|
|
Dim lvitem As ListViewItem = Me.lv_ftpde.Items.Add(info.Filename)
|
|
lvitem.SubItems.Add(info.FileType.ToString())
|
|
lvitem.SubItems.Add("-")
|
|
lvitem.SubItems.Add(info.FileDateTime.ToString("yy-MM-dd HH:mm:ss"))
|
|
lvitem.ForeColor = Color.Blue
|
|
Next
|
|
|
|
For Each info As FTPClients.FTPfileInfo In ftpdir.GetFiles("")
|
|
dataCount += 1
|
|
Dim lvitem As ListViewItem = Me.lv_ftpde.Items.Add(info.Filename)
|
|
lvitem.SubItems.Add(info.FileType.ToString())
|
|
lvitem.SubItems.Add(info.Size.ToString())
|
|
lvitem.SubItems.Add(info.FileDateTime.ToString("yy-MM-dd HH:mm:ss"))
|
|
lvitem.ForeColor = Color.Black
|
|
Next
|
|
Catch ex As Exception
|
|
MsgBox("목록갱신실패" + vbCrLf + ex.Message, MsgBoxStyle.Critical, "확인")
|
|
End Try
|
|
|
|
btFtpSearch.Enabled = True
|
|
btFtpSearch.Refresh()
|
|
|
|
If (dataCount < 1) Then
|
|
MsgBox(String.Format("경로 : {0}" + vbCrLf + "에서 검색된 파일이 없습니다", dir), MsgBoxStyle.Information, "확인")
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
|
Me.Selpath = tb_ftppath.Text
|
|
DialogResult = Windows.Forms.DialogResult.OK
|
|
End Sub
|
|
|
|
Private Sub lv_ftpde_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles lv_ftpde.MouseDoubleClick
|
|
If lv_ftpde.SelectedItems.Count < 1 Then
|
|
MsgBox("대상이 선택되지 않았습니다", MsgBoxStyle.Information, "확인")
|
|
Return
|
|
End If
|
|
|
|
Dim lv As ListViewItem = lv_ftpde.SelectedItems(0)
|
|
If lv.Text = ".." Then
|
|
'//상위폴더로이동
|
|
Dim curpath As String = tb_ftppath.Text
|
|
If curpath.EndsWith("/") Then curpath = curpath.Substring(0, curpath.Length - 1)
|
|
curpath = curpath.Replace("//", "/")
|
|
Dim curs() As String = curpath.Split("/")
|
|
Dim parentpath As String = ""
|
|
For i As Integer = 1 To curs.Length - 1
|
|
If curs(i - 1) = "" Then Continue For
|
|
parentpath += "/" + curs(i - 1)
|
|
Next
|
|
tb_ftppath.Text = parentpath
|
|
btFtpSearch.PerformClick()
|
|
Else
|
|
Dim ftype As String = lv.SubItems(1).Text
|
|
Select Case ftype
|
|
Case "Dir", "Directory"
|
|
Dim newdir As String = tb_ftppath.Text + "/" + lv.Text
|
|
newdir = newdir.Replace("//", "/")
|
|
tb_ftppath.Text = newdir
|
|
btFtpSearch.PerformClick()
|
|
Case "File"
|
|
MsgBox("원본폴더를 선택하세요" + vbCrLf + _
|
|
"선택을 완료하였다면 상단의 '선택' 버튼을 클릭하세요", MsgBoxStyle.Information, "확인")
|
|
'If MsgBox("파일을 다운로드 하시겠습니까?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "확인") = MsgBoxResult.Yes Then
|
|
' Dim file_local As String = path.GetTempPath + "\" + lv.Text
|
|
' Dim file_remote As String = tb_ftppath.Text + "/" + lv.Text
|
|
' file_local = file_local.Replace("\\", "\")
|
|
' file_remote = file_remote.Replace("//", "/")
|
|
' FTP.download(file_remote, file_local)
|
|
|
|
' If System.IO.File.Exists(file_local) Then
|
|
' Dim fi As New System.IO.FileInfo(file_local)
|
|
' Dim fs As Long = Long.Parse(lv.SubItems(2).Text)
|
|
' If fi.Length <> fs Then
|
|
' MsgBox("다운로드된 파일의 용량이 일치하지 않습니다", MsgBoxStyle.Critical, "확인")
|
|
' Return
|
|
' Else
|
|
' Dim cmd As String = "explorer " + path.GetTempPath
|
|
' Shell(cmd, AppWinStyle.NormalFocus)
|
|
' End If
|
|
' Else
|
|
' MsgBox("파일이 다운로드 되지 않았습니다", MsgBoxStyle.Critical, "확인")
|
|
' End If
|
|
|
|
'End If
|
|
End Select
|
|
End If
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub btFtpSearch_Click(sender As Object, e As EventArgs) Handles btFtpSearch.Click
|
|
|
|
If String.IsNullOrEmpty(tb_ftpserver.Text) Then
|
|
MsgBox("FTP Server IP는 반드시 입력되어야 합니다", MsgBoxStyle.Critical, "확인")
|
|
Return
|
|
End If
|
|
|
|
If Not IsNumeric(tb_ftpport.Text) Then
|
|
MsgBox("FTP Port(기본값=21)가 입력되지 않았습니다", MsgBoxStyle.Critical, "확인")
|
|
tb_ftpport.Text = "21"
|
|
Return
|
|
End If
|
|
|
|
If String.IsNullOrEmpty(tb_ftppath.Text) Then
|
|
tb_ftppath.Text = "/"
|
|
End If
|
|
|
|
FTP_0.host = tb_ftpserver.Text + ":" + tb_ftpport.Text
|
|
FTP_0.user = tb_ftpid.Text
|
|
FTP_0.pass = tb_ftppass.Text
|
|
FTP_0.Passive = chk_ftpPassive.Checked
|
|
FTP_0.utf8 = chk_ftputf8.Checked
|
|
|
|
RefreshFile(tb_ftppath.Text)
|
|
End Sub
|
|
|
|
End Class |