183 lines
11 KiB
VB.net
183 lines
11 KiB
VB.net
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
|