Files
FileManager/DriveInfo/모듈/Mod_Backup.vb
2019-08-04 20:13:56 +09:00

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