Imports System.IO Imports System.Threading Imports System.Text Module Mod_Copy '//파일이동 모듈파일 Public Sub MoveFileRCopy(winhide As Boolean) Dim SrcFI As FileInfo = Nothing Dim DesFi As FileInfo = Nothing Dim SrcFIp As String '//ft용 160328 Dim Err As Boolean = False Dim isFTP As Boolean = False If GetWorkDIr.StartsWith("ftp:/") Then isFTP = True MDiMain.MSG("파일복사중...") Application.DoEvents() Dim index As Integer = 0 Dim endcnt As Integer = MDiMain.DataSet1.WorkList.Rows.Count - 1 If MDiMain.DataSet1.WorkList Is Nothing Then If winhide Then MDiMain.Noti("MoveFileRCopy" + vbCrLf + "파일목록이 없습니다") Else MsgBox("작업파일목록이 존재하지않습니다." & vbCrLf & "진행할 수 없습니다", MsgBoxStyle.Information, "확인") End If Return End If Application.DoEvents() For Each Dr As ireaDataSet.WorkListRow In MDiMain.DataSet1.WorkList.Rows index += 1 Application.DoEvents() MDiMain.ShowCnt1(index, endcnt, "파일복사") If Dr.오류 <> "" Then Errlog("선오류감지되어서 넘어갑니다(" & Dr.오류 & ")") Else Dim 원본파일명 As String = Dr.원본경로 & "\" & Dr.원본파일명 Dim 대상파일명 As String = Dr.대상경로 & "\" & Dr.대상파일명 If isFTP Then SrcFIp = 원본파일명.Replace("\", "/") SrcFIp = SrcFIp.Replace("//", "/") Else If isFileName(원본파일명) Then SrcFI = New FileInfo(원본파일명) Else Dr.성공 = "X" Dr.오류 = "원본파일명오류:" + 원본파일명 Dr.EndEdit() Continue For End If End If If isFileName(대상파일명) Then DesFi = New FileInfo(대상파일명) Else Dr.성공 = "X" Dr.오류 = "대상파일명오류:" + 대상파일명 Dr.EndEdit() Continue For End If Application.DoEvents() '//ftp상태일때는 원본 백업을 하지 않는다. If Not isFTP Then Try Check_Backup(SrcFI, BakTag) Catch ex As Exception PLog.Add(ex.Message, True) If winhide Then MDiMain.Noti("백업정책실패: " + ex.Message) Else MsgBox("백업정책(Check_Backup이 실패했습니다)" & vbCrLf & "Baktag=" & BakTag & vbCrLf & "오류내용:" & ex.Message.ToString, MsgBoxStyle.Information, "메일보내주세요") End If End Try End If Application.DoEvents() Try If Directory.Exists(DesFi.DirectoryName) = False Then Directory.CreateDirectory(DesFi.DirectoryName) '//대상폴더생성 End If Catch ex As Exception Dr.성공 = "X" Dr.오류 = "대상폴더생성실패:" + ex.Message Dr.EndEdit() Errlog("대상폴더생성실패:" + DesFi.DirectoryName & vbCrLf + ex.Message.ToString) Continue For End Try If DesFi.Exists Then Dr.성공 = "△" Dr.오류 = "대상파일존재 넘어감" Dr.EndEdit() Else If isFTP Then Dim 재시도횟수 As Integer = 0 FTPDOWN: Try FTP_0.Download(SrcFIp, DesFi.FullName, True) If System.IO.File.Exists(DesFi.FullName) Then Dim fi As New System.IO.FileInfo(DesFi.FullName) If fi.Length = 0 Then Dr.성공 = "X" Dr.오류 = "다운로드실패(0byte)" Dr.EndEdit() Else Dr.성공 = "O" Dr.오류 = "" Dr.EndEdit() Continue For End If Else Dr.성공 = "X" Dr.오류 = "다운로드실패(대상파일이없음)" Dr.EndEdit() End If Catch ex As Exception Dr.성공 = "X" Dr.오류 = "다운로드실패(예외:" + ex.Message + ")" Dr.EndEdit() End Try Application.DoEvents() If Dr.성공 = "X" Then '//다운로드실패일때는 대상횟수로 연속 다운로드를 한다 If 재시도횟수 < MaxRetryCount Then Dr.성공 = "■" Dr.오류 = String.Format("재시도({0}/{1})", 재시도횟수, MaxRetryCount) Dr.EndEdit() 재시도횟수 += 1 PLog.Add("재실행으로인한 지연시간") MDiMain.Noti(String.Format("FTP Download 오류(재시도:{0}/{1})" + vbCrLf + SrcFIp, 재시도횟수, MaxRetryCount)) Form_Status.Refresh() Threading.Thread.Sleep(2000) GoTo FTPDOWN Else '//아무것도 하지않는다 이것은 오류이다. Err = True Continue For End If End If Else Try '//일반파일은 기존대로 사용하도록 한다. SrcFI.CopyTo(DesFi.FullName, True) Dr.성공 = "O" Dr.오류 = "" Dr.EndEdit() Catch ex As Exception Err = True Dr.성공 = "X" Dr.오류 = "일반파일복사오류:" + ex.Message.ToString() Dr.EndEdit() Continue For End Try End If Application.DoEvents() End If End If Next MDiMain.MSG("파일 [복사] 완료" & IIf(Err, "(일부파일에 오류가 발생하였습니다", "")) MDiMain.Noti("파일(복사)완료") End Sub End Module