This commit is contained in:
chi
2021-12-27 22:20:25 +09:00
parent 952ceef232
commit 2c6c2aa69c
6 changed files with 323 additions and 309 deletions

View File

@@ -151,6 +151,7 @@
<Compile Include="모듈\Pub.vb" />
<Compile Include="모듈\mod_DeleteR.vb" />
<Compile Include="모듈\Mod_Move.vb" />
<Compile Include="모듈\Mod_Copy.vb" />
<Compile Include="입력폼\Form_Status.Designer.vb">
<DependentUpon>Form_Status.vb</DependentUpon>
</Compile>

View File

@@ -33,5 +33,5 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("21.12.26.2200")>
<Assembly: AssemblyFileVersion("21.12.26.2200")>
<Assembly: AssemblyVersion("21.12.27.2200")>
<Assembly: AssemblyFileVersion("21.12.27.2200")>

View File

@@ -0,0 +1,187 @@
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

View File

@@ -65,6 +65,8 @@ Module Mod_Move '//파일이동 모듈파일
SrcOffset = index + getSP() - 1 '//줄시작값과 현재의 오프셋을 더한다.
Dim loopcnt2 As Integer = 0
Dim 작업폴더 As String = GetWorkDIr().Replace("ftp:", "").Replace("FTP:", "")
For Each dr As ireaDataSet.FileListRow In WRow
NR = MDiMain.DataSet1.WorkList.NewWorkListRow
@@ -87,21 +89,24 @@ Module Mod_Move '//파일이동 모듈파일
NR.오류 = ""
Try
DesDir = New DirectoryInfo(MDiMain.DESD_GetDesDir(SrcOffset, dr.파일명.Substring(0, dr.파일명.LastIndexOf(".")), GetExtendOnly, dr.경로.Substring(GetWorkDIr.Length)))
NR.대상경로 = DesFile.DirectoryName
DesDir = New DirectoryInfo(MDiMain.DESD_GetDesDir(SrcOffset, dr.파일명.Substring(0, dr.파일명.LastIndexOf(".")), GetExtendOnly, dr.경로.Substring(작업폴더.Length)))
NR.대상경로 = DesDir.FullName '//수정함
Catch ex As Exception
NR.대상경로 = ""
NR.오류 += ex.Message
End Try
Try
DesFile = New FileInfo(DesDir.FullName & "\" & MDiMain.Desf_Get_FileList(SrcOffset, dr.파일명.Substring(0, dr.파일명.LastIndexOf(".")), GetExtendOnly) & Pub.GetExtendFromMdi.Trim("*"))
NR.대상파일명 = DesFile.Name
Catch ex As Exception
NR.대상파일명 = ""
NR.오류 += ex.Message
End Try
If String.IsNullOrEmpty(NR.대상경로) = False Then
Try
DesFile = New FileInfo(DesDir.FullName & "\" & MDiMain.Desf_Get_FileList(SrcOffset, dr.파일명.Substring(0, dr.파일명.LastIndexOf(".")), GetExtendOnly) & Pub.GetExtendFromMdi.Trim("*"))
NR.대상파일명 = DesFile.Name
Catch ex As Exception
NR.대상파일명 = ""
NR.오류 += ex.Message
End Try
End If
If NR.오류 <> "" Then
'//이미오류가 발생했다.
Try
@@ -312,183 +317,4 @@ Module Mod_Move '//파일이동 모듈파일
MDiMain.MSG("파일 [이동] 완료" & IIf(Errcount > 0, "(일부파일에 오류가 발생하였습니다", ""))
End Sub
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