Imports System.IO Imports System.Threading Imports System.Text Module Mod_Move '//파일이동 모듈파일 Public Sub MoveFileM(Param As RunParam) '//파일목록으로부터 삭제대상폴더의 파일을 삭제한다. Dim StrBuff As New StringBuilder Dim WorkDes As String = IIf(GetrunType() = E_Runtype.Move, "이동", "복사") '//작업목록을 작성합니다. MDiMain.MSG(WorkDes & "목록 작성중.") '//변수목록 Dim NR As ireaDataSet.WorkListRow Dim WRow() As ireaDataSet.FileListRow Dim DesDir As DirectoryInfo Dim DesFile As FileInfo Dim SrcOffset As Long = 0 '//원본목록에서의 레코드위치(대상파일을 생성하려면 줄번호를 기억해야한다.) Dim index As Integer = 0 Dim endcnt As Integer = MDiMain.DataSet1.SrcList.Rows.Count - 1 If MDiMain.DataSet1.SrcList Is Nothing Then MsgBox("원본목록이 존재하지않습니다." & vbCrLf & "진행할 수 없습니다", MsgBoxStyle.Information, "확인") Return End If For Each drs As ireaDataSet.SrcListRow In MDiMain.DataSet1.SrcList.Rows If MDiMain.DataSet1.FileList Is Nothing Then MsgBox("파일목록이 존재하지않습니다." & vbCrLf & "진행할 수 없습니다", MsgBoxStyle.Information, "확인") Return End If index += 1 MDiMain.ShowCnt1(index, endcnt, "목록작성") Application.DoEvents() '//전체목록에서 원본목록 검색 Try WRow = MDiMain.DataSet1.FileList.Select("파일명 like '" & drs.목록명.Replace("'", "''") & "'") '//170410 홑따옴표 처리 및 오류처리기능 추가 Catch ex As Exception '//오류가 발생했으므로 오류로 기록하고 넘긴다. WRow = Nothing NR = MDiMain.DataSet1.WorkList.NewWorkListRow NR.원본경로 = String.Empty NR.원본파일명 = drs.목록명 Select Case GetrunType() Case E_Runtype.Copy NR.구분 = "복사" Case E_Runtype.Delete NR.구분 = "삭제" Case E_Runtype.Move NR.구분 = "이동" End Select NR.대상경로 = String.Empty NR.대상파일명 = String.Empty NR.오류 = "파일추출실패:" + ex.Message Try MDiMain.DataSet1.WorkList.Rows.Add(NR) Catch ex2 As Exception '//추가오류는 뻔하다이미 그 파일이 있는경우다. Continue For End Try End Try 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 NR.원본경로 = dr.경로 NR.원본파일명 = dr.파일명 Select Case GetrunType() Case E_Runtype.Copy NR.구분 = "복사" Case E_Runtype.Delete NR.구분 = "삭제" Case E_Runtype.Move NR.구분 = "이동" End Select loopcnt2 += 1 Application.DoEvents() '//검색된것들은 이동또는 복사대상이므로 작업목록에 집어넣는다. '//대상파일명을 생성한다. NR.오류 = "" Try 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 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 MDiMain.DataSet1.WorkList.Rows.Add(NR) Catch ex As Exception '//추가오류는 뻔하다이미 그 파일이 있는경우다. End Try Else If DesFile.Name.IndexOf("*") = -1 AndAlso DesFile.Name.IndexOf("?") = -1 Then Try MDiMain.DataSet1.WorkList.Rows.Add(NR) Catch ex As Exception '//추가오류는 뻔하다이미 그 파일이 있는경우다. NR.오류 += ",중복된 대상파일입니다(" & ex.Message.ToString & ")" 'MDiMain.DataSet1.WorkList.Rows.Add(NR) makelog2("중복된 대상파일이 생성되었습니다") makelog2(" 원본파일명 : " & NR.원본경로 & "\" & NR.원본파일명) makelog2(" 대상파일명 : " & NR.대상경로 & "\" & NR.대상파일명) 'If MsgBox("중복된 대상파일이 확인되었습니다" & vbCrLf & vbCrLf & "계속하시겠습니까?", MsgBoxStyle.Information Or MsgBoxStyle.OkCancel, "확인") <> MsgBoxResult.Ok Then ' Return 'End If End Try End If End If Application.DoEvents() Next Next MDiMain.MSG(WorkDes & "목록 작성완료.") MDiMain.MSG(WorkDes & "연속참조 검사") index = 0 Dim Rc As Integer = MDiMain.DataSet1.WorkList.Rows.Count Dim 원본파일명, 원본경로, 대상파일명, 대상경로 As String Dim 시퀀스 As Integer Dim Findrow As Boolean = False Application.DoEvents() For Each dr As ireaDataSet.WorkListRow In MDiMain.DataSet1.WorkList.Rows Findrow = False index += 1 MDiMain.ShowCnt1(index, Rc, "연속참조검사") 원본파일명 = dr.원본파일명 원본경로 = dr.원본경로 대상파일명 = dr.대상파일명 대상경로 = dr.대상경로 시퀀스 = dr.seq Application.DoEvents() If 원본파일명 <> "" Then Dim dr2() As ireaDataSet.WorkListRow = MDiMain.DataSet1.WorkList.Select("대상파일명='" & 원본파일명 & "' and 대상경로='" & 원본경로 & "' and seq <> " & 시퀀스) For Each Drow2 As ireaDataSet.WorkListRow In dr2 Findrow = True Drow2.성공 = "◈" Drow2.오류 = "연속참조오류:" & index Next If Findrow Then dr.성공 = "◈" dr.오류 = "연속참조오류" End If End If If 대상파일명 <> "" Then Dim dr2() As ireaDataSet.WorkListRow = MDiMain.DataSet1.WorkList.Select("원본파일명='" & 대상파일명 & "' and 원본경로='" & 대상경로 & "' and seq <> " & 시퀀스) For Each Drow2 As ireaDataSet.WorkListRow In dr2 Findrow = True Drow2.성공 = "◈" Drow2.오류 = "연속참조오류:" & index Next If Findrow Then dr.성공 = "◈" dr.오류 = "연속참조오류" End If End If Next Application.DoEvents() '//오류를 제외한 실제 처리할 내용을 리스트뷰에 넣는다 '//작업대상을 지정해준다. Dim 작업갯수 As Integer = 0 Dim DRows() As System.Data.DataRow = MDiMain.DataSet1.WorkList.Select("isnull(오류,'')=''") MDiMain.AddScheduleDiv(" " + DRows.Length.ToString() + " 개의 작업대상이 설정되었습니다") Dim loopcnt As Integer = 0 For Each dr As ireaDataSet.WorkListRow In DRows Dim lvKey As String = dr.대상경로 + "\" + dr.대상파일명 Dim 원본파일 As String = dr.원본경로 + "\" + dr.원본파일명 Dim 대상파일 As String = dr.대상경로 + "\" + dr.대상파일명 If Param.isFTPWork Then 원본파일 = 원본파일.Replace("\", "/") 대상파일 = 대상파일.Replace("\", "/") End If loopcnt += 1 Application.DoEvents() 'If MDiMain.lvSchedule.Items.IndexOfKey(lvKey) = -1 Then ' 작업갯수 += 1 ' Dim lvSC As ListViewItem = MDiMain.lvSchedule.Items.Add(lvKey, dr.구분, 0) ' lvSC.SubItems.Add(원본파일) ' lvSC.SubItems.Add(대상파일) ' lvSC.SubItems.Add("대기") ' lvSC.SubItems.Add(작업갯수.ToString()) ' lvSC.ForeColor = Color.DarkMagenta ' '//명령파라미터추가 ' 'Dim NewCmd As New SJobCommand() ' 'Select Case dr.구분 ' ' Case "복사" ' ' NewCmd.Mode = E_Runtype.Copy ' ' Case "삭제" ' ' NewCmd.Mode = E_Runtype.Delete ' ' Case "이동" ' ' NewCmd.Mode = E_Runtype.Move ' 'End Select ' 'NewCmd.SrcDir = dr.원본경로 ' 'NewCmd.SrcFile = dr.원본파일명 ' 'NewCmd.DesDir = dr.대상경로 ' 'NewCmd.DesFile = dr.대상파일명 ' 'NewCmd.isFTP = Param.isFTPWork ' 'lvSC.Tag = NewCmd 'Else ' PLog.Add("중복대상파일:" + lvKey) 'End If Next End Sub Public Sub MoveFileRMove(winhide As Boolean) Dim SrcFI, DesFi As FileInfo Dim Errcount As Integer = 0 MDiMain.MSG("파일이동중...") Dim index As Integer = 0 Dim endcnt As Integer = MDiMain.DataSet1.WorkList.Rows.Count - 1 If MDiMain.DataSet1.WorkList Is Nothing Then MsgBox("작업파일목록이 존재하지않습니다." & vbCrLf & "진행할 수 없습니다", MsgBoxStyle.Information, "확인") Return End If For Each Dr As ireaDataSet.WorkListRow In MDiMain.DataSet1.WorkList.Rows index += 1 MDiMain.ShowCnt1(index, endcnt, "파일이동") My.Application.DoEvents() If Dr.오류 <> "" Then Errlog("선오류감지되어서 넘어갑니다(" & Dr.오류 & ")") Errcount += 1 Else Dim 원본파일명 As String = Dr.원본경로 & "\" & Dr.원본파일명 Dim 대상파일명 As String = Dr.대상경로 & "\" & Dr.대상파일명 If Not isFileName(원본파일명) Then Dr.성공 = "X" Dr.오류 = "원본파일명이 올바르지 않습니다:" + 원본파일명 ElseIf Not isFileName(대상파일명) Then Dr.성공 = "X" Dr.오류 = "대상파일명이 올바르지 않습니다:" + 대상파일명 Else SrcFI = New System.IO.FileInfo(원본파일명) DesFi = New System.IO.FileInfo(대상파일명) Try Check_Backup(SrcFI, BakTag) Catch ex As Exception MsgBox("백업정책(Check_Backup이 실패했습니다)" & vbCrLf & "Baktag=" & BakTag & vbCrLf & "오류내용:" & ex.Message.ToString, MsgBoxStyle.Information, "메일보내주세요") End Try Application.DoEvents() '//폴더생성시 오류가 발생할수있다. If Not System.IO.Directory.Exists(Dr.대상경로) Then If Not DirCreate(Dr.대상경로) Then Dr.성공 = "X" Dr.오류 = "대상폴더생성실패:" + Dr.대상경로 Errcount += 1 Continue For End If End If Application.DoEvents() Try '//대상파일이존재한다면 넘어가도록 한다. If DesFi.Exists AndAlso DesFi.Length = SrcFI.Length Then Dr.성공 = "△" Dr.오류 = "대상파일존재 넘어감" 'DesFi.Delete() '//덮어쓰기이므로 기존파일을 삭제해주심! Else SrcFI.MoveTo(DesFi.FullName) '//실제로 이동한다. Dr.성공 = "O" Dr.오류 = "" End If Catch ex As Exception Dr.성공 = "X" Dr.오류 = "MFRM:" + ex.Message.ToString Errcount += 1 End Try Application.DoEvents() End If End If Next MDiMain.MSG("파일 [이동] 완료" & IIf(Errcount > 0, "(일부파일에 오류가 발생하였습니다", "")) End Sub End Module