Imports System.IO '---------------------------------- ' backup Class '--------------------------------- Module Mod_Backup Public Backupfolder1 As New ArrayList Private Function ExistBakFolder1(ByVal FolderName As String) As Boolean '//지정된 폴더가 백업된 폴더목록에 존재하는지 'addlog("기존백업폴더목록에 저장되어잇는지 : " & Backupfolder.IndexOf(FolderName)) If Backupfolder1.IndexOf(FolderName) >= 0 Then Return True If MDiMain.cbBakTarget.SelectedIndex = 0 Then '//백업정책1이 폴더백업이고 하위폴더포함한 백업일경우에는 상위폴더가 백업되어잇는지 찾아야한다. For Each P As String In Backupfolder1 '//백업된 폴더의 모든 폴더명을 루프로돈다. '//백업된 폴더명이 루트라면 지금의 폴더명보다 더 짧을것이다. indexof 로 찾는다. If FolderName.ToUpper.IndexOf(P.ToUpper) >= 0 Then Return True Next End If Return False End Function Public Sub Check_Backup(ByVal fn As FileInfo, Optional ByVal tag As String = "") Dim BT1 As E_baktype = GetBackType1() '//백업정책의 형태를 가져온다. If BT1 <> E_baktype.none Then If MDiMain.cbBakTarget.SelectedIndex = 0 Then Try BT1WorkFD(BT1, fn, tag & "D") ' & "_FD") '//폴더백업 Catch ex As Exception Errlog("BT1WorkFD 정의" & ex.Message.ToString) End Try Else Try BT1WorkFL(BT1, fn, tag & "F") ' & "_FL") '//파일백업 Catch ex As Exception Errlog("BT1WorkFL 정의" & ex.Message.ToString) End Try End If End If End Sub Private Sub BT1WorkFL(ByVal bt1 As E_baktype, ByVal fn As FileInfo, ByVal tag As String) Dim NewFn As String Dim NFN As FileInfo Select Case bt1 Case E_baktype.none '//아무것도 하지않는다. Case E_baktype.Folder1 '//지정된 1번 폴더에 복사를 해놓는다. 바귄파일의 상위폴더명을 원래폳러명+날짜+태그 로 한다. NewFn = fn.FullName.ToUpper.Replace(GetWorkDIr.ToUpper, GetBakDir1.ToUpper & "\" & tag) '//작업폴더명은 백업폴더명으로 변경 NFN = New FileInfo(NewFn) Addlog("B", fn.FullName, NFN.FullName, "파일백업(정책1-사용자지정폴더1)") NFN.Directory.Create() '//디렉토리생성 fn.CopyTo(NFN.FullName, True) Case E_baktype.CurrnetFolder '//해당파일이 발견된 폴더의 하위폴더를 생성해서 백업 폴더명은 위에꺼 참고 NewFn = fn.DirectoryName & "\BAK_" & tag & "\" & fn.Name '//현재폴더에 태그명으로 폴더를 만들고 그곳에 파일을 저장한다. NFN = New FileInfo(NewFn) Addlog("B", fn.FullName, NFN.FullName, "파일백업(정책1-현재폴더)") NFN.Directory.Create() '//디렉토리생성 fn.CopyTo(NFN.FullName, True) Case E_baktype.ParentFolder '//해당파일이 발견된 폴더의 상위폴더를 생성 폳러명 위 참조 NewFn = fn.Directory.FullName & tag & "\" & fn.Name '//상위폴더에 생성 NFN = New FileInfo(NewFn) Addlog("B", fn.FullName, NFN.FullName, "파일백업(정책1-상위폴더)") NFN.Directory.Create() '//디렉토리생성 fn.CopyTo(NFN.FullName, True) End Select End Sub Private Sub BT1WorkFD(ByVal bt1 As E_baktype, ByVal fn As FileInfo, ByVal tag As String) '//백업정책1 폴더백업 Dim NewFn As String Dim NFN As FileInfo Dim FL() As FileInfo Select Case bt1 Case E_baktype.none '//아무것도 하지않는다. Case E_baktype.Folder1 '//지정된 1번 폴더에 복사를 해놓는다. 바귄파일의 상위폴더명을 원래폳러명+날짜+태그 로 한다. 'Addlog2("백업사용자폴더1 파일명 : " & fn.FullName & " 태그:" & tag) NewFn = fn.FullName.ToUpper.Replace(GetWorkDIr.ToUpper, GetBakDir1.ToUpper & "\" & tag) '//작업폴더명은 백업폴더명으로 변경 NewFn = NewFn.Replace("\\", "\") 'Addlog2("백업형태로 변경된 파일명 : " & NewFn) NFN = New FileInfo(NewFn) '//백업된폴더목록에 해당 목록이없으면 If ExistBakFolder1(NFN.DirectoryName) = False Then MDiMain.MSG(NFN.DirectoryName & "폴더 백업중...") MDiMain.Refresh() Addlog("B", fn.FullName, NFN.FullName, "폴더백업(정책1-사용자지정폴더1)") '//원본폴더의 모든 내용을 복사해논다. Directory.CreateDirectory(NFN.DirectoryName) '//디렉토리생성 FL = New DirectoryInfo(fn.DirectoryName).GetFiles("*.*", SearchOption.AllDirectories) '//파일목록을 가져온다. Dim index As Integer = 0 Dim endcnt As Integer = FL.Length For Each F As FileInfo In FL index += 1 MDiMain.ShowCnt2(index, endcnt, "백업") My.Application.DoEvents() Try F.CopyTo(NFN.DirectoryName & "\" & F.Name, True) '//새로운경로로 복사를 한다. Catch ex As System.IO.DirectoryNotFoundException Dim B As New System.IO.FileInfo(NFN.DirectoryName & "\" & F.Name) System.IO.Directory.CreateDirectory(B.DirectoryName) B = Nothing F.CopyTo(NFN.DirectoryName & "\" & F.Name, True) '//새로운경로로 복사를 한다. Catch ex As Exception MsgBox("파일복사오류 : " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "확인") End Try Next Backupfolder1.Add(NFN.DirectoryName) MDiMain.MSG(NFN.DirectoryName & "폴더 백업완료.") MDiMain.Refresh() End If Case E_baktype.CurrnetFolder '//해당파일이 발견된 폴더의 하위폴더를 생성해서 백업 폴더명은 위에꺼 참고 NewFn = fn.DirectoryName & "\BAK_" & tag & "\" & fn.Name '//현재폴더에 태그명으로 폴더를 만들고 그곳에 파일을 저장한다. NFN = New FileInfo(NewFn) '//백업된폴더목록에 해당 목록이없으면 If ExistBakFolder1(NFN.DirectoryName) = False Then MDiMain.MSG(NFN.DirectoryName & "폴더 백업중...") MDiMain.Refresh() Addlog("B", fn.FullName, NFN.FullName, "폴더백업(정책1-현재폴더)") '//원본폴더의 모든 내용을 복사해논다. Directory.CreateDirectory(NFN.DirectoryName) '//디렉토리생성 FL = New DirectoryInfo(fn.DirectoryName).GetFiles("*.*", SearchOption.AllDirectories) Dim index As Integer = 0 Dim endcnt As Integer = FL.Length For Each F As FileInfo In FL index += 1 MDiMain.ShowCnt2(index, endcnt, "백업") My.Application.DoEvents() Try F.CopyTo(NFN.DirectoryName & "\" & F.Name, True) '//새로운경로로 복사를 한다. Catch ex As System.IO.DirectoryNotFoundException Dim B As New System.IO.FileInfo(NFN.DirectoryName & "\" & F.Name) System.IO.Directory.CreateDirectory(B.DirectoryName) B = Nothing F.CopyTo(NFN.DirectoryName & "\" & F.Name, True) '//새로운경로로 복사를 한다. Catch ex As Exception MsgBox("파일복사오류 : " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "확인") End Try Next Backupfolder1.Add(NFN.DirectoryName) MDiMain.MSG(NFN.DirectoryName & "폴더 백업완료.") MDiMain.Refresh() End If Case E_baktype.ParentFolder '//해당파일이 발견된 폴더의 상위폴더를 생성 폳러명 위 참조 NewFn = fn.Directory.FullName & tag & "\" & fn.Name '//상위폴더에 생성 NFN = New FileInfo(NewFn) If ExistBakFolder1(NFN.DirectoryName) = False Then MDiMain.MSG(NFN.DirectoryName & "폴더 백업중...") MDiMain.Refresh() addlog("B", fn.FullName, NFN.FullName, "폴더백업(정책1-상위폴더)") '//원본폴더의 모든 내용을 복사해논다. Directory.CreateDirectory(NFN.DirectoryName) '//디렉토리생성 FL = New DirectoryInfo(fn.DirectoryName).GetFiles("*.*", SearchOption.AllDirectories) Dim index As Integer = 0 Dim endcnt As Integer = FL.Length For Each F As FileInfo In FL index += 1 MDiMain.ShowCnt2(index, endcnt, "백업") My.Application.DoEvents() Try F.CopyTo(NFN.DirectoryName & "\" & F.Name, True) '//새로운경로로 복사를 한다. Catch ex As System.IO.DirectoryNotFoundException Dim B As New System.IO.FileInfo(NFN.DirectoryName & "\" & F.Name) System.IO.Directory.CreateDirectory(B.DirectoryName) B = Nothing F.CopyTo(NFN.DirectoryName & "\" & F.Name, True) '//새로운경로로 복사를 한다. Catch ex As Exception MsgBox("파일복사오류 : " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "확인") End Try Next Backupfolder1.Add(NFN.DirectoryName) MDiMain.MSG(NFN.DirectoryName & "폴더 백업완료.") MDiMain.Refresh() End If End Select End Sub End Module