FileManager_Runtime_1704102200_Net4
This commit is contained in:
568
DriveInfo/모듈/Job.vb
Normal file
568
DriveInfo/모듈/Job.vb
Normal file
@@ -0,0 +1,568 @@
|
||||
Module Job
|
||||
|
||||
'//작업을 이어서하는 지 플래그
|
||||
Private Bw As System.Threading.Thread
|
||||
|
||||
Structure RunParam
|
||||
Dim StartP As Integer
|
||||
Dim EndP As Integer
|
||||
Dim WorkDir As String
|
||||
Dim Replay As Boolean
|
||||
Dim isCopy As Boolean '//복사작업인가?
|
||||
Dim 원본폴더조합 As Boolean
|
||||
Dim 확장자 As String
|
||||
|
||||
Public ReadOnly Property isFTPWork As Boolean
|
||||
Get
|
||||
If WorkDir.StartsWith("ftp:") Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
End Structure
|
||||
|
||||
Public Function Run(Param As RunParam) As Boolean
|
||||
|
||||
PLog.Add("작업시작", True)
|
||||
|
||||
'//일반 초기화
|
||||
PLog.Add("시스템초기화")
|
||||
Log = New ArrayList()
|
||||
log2 = New ArrayList()
|
||||
Backupfolder1.Clear() '//기존의 백업폴더명을 삭제한다. (새로쓰기위해서)
|
||||
|
||||
'//원본폴더조합기능이 켜져있는경우
|
||||
If Param.원본폴더조합 Then
|
||||
|
||||
MDiMain.MSG("원본폴더조합시작")
|
||||
MDiMain.SubDirListCler() '//기존목록은 초기화한다.
|
||||
|
||||
'//작업순서에 포함시킨다.
|
||||
Dim lv As ListViewItem = MDiMain.lvSchedule.Items.Add("폴더조합")
|
||||
lv.SubItems.Add("원본")
|
||||
lv.SubItems.Add("지정된 목록으로부터 하위폴더명을 추출합니다.")
|
||||
lv.SubItems.Add("대기")
|
||||
lv.SubItems.Add("-")
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
|
||||
MDiMain.Noti("하위폴더조합 실행")
|
||||
|
||||
'//이어하기 작업이 설정되어있다면?
|
||||
Dim 체크섬 As String = ""
|
||||
If Not Prev_file Is Nothing Then
|
||||
체크섬 = FileCheckSum(Prev_file.FullName)
|
||||
End If
|
||||
Dim jobfile As String = String.Format("{0}\{1}_{2}_{3}_{4}_{5}.job", PathJob, Prev_file.Name, Prev_file.Length, Param.StartP, Param.EndP, 체크섬)
|
||||
Dim 폴더조합불러오기성공 As Boolean = False
|
||||
If Param.Replay Then
|
||||
'//원본폴더조합기능은 직접편집이아니고 불러온 파일명과 해당 파일의 크기가 동일한 기록이 있다면 그것을 이용한다
|
||||
If Not Prev_file Is Nothing AndAlso Prev_file.Exists Then
|
||||
If System.IO.File.Exists(jobfile) Then
|
||||
'//동일한 내역을 가진 job 파일이 있으므로 그것을 이용하도록 한다
|
||||
Dim fi As New System.IO.FileInfo(jobfile)
|
||||
If fi.Length > 0 Then
|
||||
Try
|
||||
Dim buffer As String = System.IO.File.ReadAllText(jobfile)
|
||||
For Each line As String In buffer.Split(vbCrLf)
|
||||
If String.IsNullOrEmpty(line) Then Continue For
|
||||
MDiMain.AddSubDirList(line.Trim())
|
||||
Next
|
||||
폴더조합불러오기성공 = True
|
||||
|
||||
'//현재상태
|
||||
lv.SubItems(2).Text = String.Format("{0}건 의 하위폴더가 설정됨", MDiMain.SubDirCount)
|
||||
lv.SubItems(3).Text = "통과"
|
||||
lv.BackColor = Color.LightSkyBlue
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
|
||||
Catch ex As Exception
|
||||
PLog.Add("폴더조합불러오기오류 : " + ex.Message)
|
||||
End Try
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
If Not 폴더조합불러오기성공 Then
|
||||
'//새로 생성한다.
|
||||
|
||||
'//프로그레스바 초기화
|
||||
MDiMain.ProgressSet(Param.EndP, Param.StartP, Param.StartP)
|
||||
|
||||
'//수량 표시
|
||||
MDiMain.ShowCnt1(Param.StartP, Param.EndP)
|
||||
|
||||
Dim rcnt As Integer = Param.EndP - Param.StartP + 1
|
||||
PLog.Add(String.Format("원본폴더 조합기능 시작({0})", rcnt))
|
||||
|
||||
'//현재작업을 저장해준다
|
||||
Dim JobFileBuf As New System.Text.StringBuilder
|
||||
|
||||
For i As Integer = Param.StartP To Param.EndP
|
||||
MDiMain.ProgressVal(i)
|
||||
|
||||
'//작업진행사항을 표시해준다.
|
||||
lv.SubItems(3).Text = String.Format("{0}/{1}", i, Param.EndP)
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
|
||||
Dim subdir As String = MDiMain.srcd_Get_FileList(i, "", Param.확장자).ToString
|
||||
If subdir = "/" OrElse subdir = "\" OrElse subdir.ToLower().IndexOf("err") <> -1 Then Continue For
|
||||
If Not MDiMain.CheckExistSubDir(subdir) Then
|
||||
MDiMain.AddSubDirList(subdir) '//존재하는 항목은 추가되지 않는다.
|
||||
JobFileBuf.AppendLine(subdir)
|
||||
End If
|
||||
Application.DoEvents()
|
||||
Next
|
||||
|
||||
'//현재상태
|
||||
lv.SubItems(3).Text = "완료"
|
||||
lv.BackColor = Color.LightGreen
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
|
||||
'//완료목록을 저장해준다.
|
||||
System.IO.File.WriteAllText(jobfile, JobFileBuf.ToString())
|
||||
End If
|
||||
|
||||
End If
|
||||
|
||||
'//중간분리자
|
||||
MDiMain.AddScheduleDiv("파일목록 수집")
|
||||
|
||||
'//파일정보수집
|
||||
MDiMain.MSG("파일정보수집")
|
||||
|
||||
'//서브목록이있다면 그것들만 수집힌다.
|
||||
Dim fullsubdir As String
|
||||
Dim 재시도 As Boolean = False
|
||||
retryFileSearch:
|
||||
|
||||
'//폴더내의 파일목록을 수집한다.
|
||||
Dim 수집오류 As Boolean = False
|
||||
If MDiMain.HasSubDir Then '//서브목록이 있다면
|
||||
|
||||
'//프로그레스 설정과 현재 수량 표시
|
||||
MDiMain.ProgressSet(MDiMain.SubDirCount, 0, 0)
|
||||
|
||||
For i As Integer = 1 To MDiMain.SubDirCount
|
||||
MDiMain.ShowCnt1(i, MDiMain.SubDirCount)
|
||||
MDiMain.ProgressVal(i)
|
||||
|
||||
Dim lvSubDir As ListViewItem = MDiMain.list_subdir.Items(i - 1)
|
||||
fullsubdir = CStr(GetWorkDIr() & "\" & lvSubDir.Text).Replace("\\", "\")
|
||||
|
||||
'//대상폴더가 FTP람녀 폴더구분기호를 \ 에서 / 로 변경해야한다.
|
||||
If Param.isFTPWork Then fullsubdir = fullsubdir.Replace("\", "/")
|
||||
|
||||
Dim lvitem As ListViewItem = MDiMain.lvSchedule.Items.Add("검색")
|
||||
lvitem.SubItems.Add(fullsubdir)
|
||||
lvitem.SubItems.Add("파일목록을 작성합니다.")
|
||||
lvitem.SubItems.Add("대기")
|
||||
lvitem.SubItems.Add("-")
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
Application.DoEvents()
|
||||
|
||||
MDiMain.Noti("폴더검색" + vbCrLf + fullsubdir)
|
||||
|
||||
If 재시도 AndAlso lvSubDir.ForeColor <> Color.Red Then
|
||||
'//재시도이므로 처리하지 않는다
|
||||
PLog.Add("재시도작업이므로 확인개체는 처리하지 않습니다(" + lvSubDir.Text + ")")
|
||||
Continue For
|
||||
End If
|
||||
|
||||
'//FTP가 대상일경우에는 별도 처리를 한다.
|
||||
If Param.isFTPWork Then
|
||||
fullsubdir = fullsubdir.Replace("\", "/")
|
||||
Dim ermsg As String = ""
|
||||
Dim fnotfound As Boolean = False
|
||||
Dim filecount As Integer = 0
|
||||
Dim RetryCount As Integer = 0
|
||||
RETRYFTP:
|
||||
RetryCount += 1
|
||||
If Not SearchFTP(Param, lvitem, fullsubdir, ermsg, fnotfound, filecount) Then
|
||||
If Not fnotfound Then
|
||||
'//오류가 발생했다면 3회정도 재시도를 한다.
|
||||
If RetryCount <= MaxRetryCount Then
|
||||
lvitem.ForeColor = Color.DarkMagenta
|
||||
lvitem.SubItems(3).Text = String.Format("{0}/{1}", RetryCount, MaxRetryCount)
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
PLog.Add(String.Format("재시도를 위해서 다음 시간을 기다림 : {0}ms", RetrySleeptime))
|
||||
Threading.Thread.Sleep(RetrySleeptime)
|
||||
Application.DoEvents()
|
||||
GoTo RETRYFTP
|
||||
Else
|
||||
lvitem.ForeColor = Color.White
|
||||
lvitem.BackColor = Color.DarkRed
|
||||
lvitem.SubItems(3).Text = "오류"
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
Application.DoEvents()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
SearchDir(Param, New DirectoryInfo(fullsubdir))
|
||||
Application.DoEvents()
|
||||
End If
|
||||
|
||||
'//delay
|
||||
Threading.Thread.Sleep(1000)
|
||||
Next
|
||||
Else '//없으면 지정된 목록을 기준으로 잡는다
|
||||
'MsgBox("dirinfo" & New DirectoryInfo(GetWorkDIr).FullName)
|
||||
|
||||
If Param.WorkDir.StartsWith("ftp:/") Then
|
||||
Dim ermsg As String = ""
|
||||
Dim fnotfound As Boolean = False
|
||||
Dim filecount As Integer = 0
|
||||
|
||||
Dim lvitem As ListViewItem = MDiMain.lvSchedule.Items.Add("검색")
|
||||
lvitem.SubItems.Add(Param.WorkDir)
|
||||
lvitem.SubItems.Add("FTP 파일명수집")
|
||||
lvitem.SubItems.Add("대기")
|
||||
lvitem.SubItems.Add("-")
|
||||
|
||||
MDiMain.Noti("폴더검색" + vbCrLf + Param.WorkDir)
|
||||
Application.DoEvents()
|
||||
|
||||
If Not SearchFTP(Param, lvitem, GetWorkDIr, ermsg, fnotfound, filecount) Then
|
||||
MsgBox("FTP경로조회가 실패되었습니다" + vbCrLf + ermsg, MsgBoxStyle.Critical, "확인")
|
||||
Else
|
||||
Log.Add("FTP 파일조회성공 : " + Param.WorkDir + ":" + filecount.ToString())
|
||||
End If
|
||||
Else
|
||||
|
||||
Dim lvitem As ListViewItem = MDiMain.lvSchedule.Items.Add("검색")
|
||||
lvitem.SubItems.Add(Param.WorkDir)
|
||||
lvitem.SubItems.Add("파일명수집")
|
||||
lvitem.SubItems.Add("대기")
|
||||
lvitem.SubItems.Add("-")
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
Application.DoEvents()
|
||||
|
||||
SearchDir(Param, New DirectoryInfo(Param.WorkDir))
|
||||
End If
|
||||
End If
|
||||
|
||||
If 수집오류 Then
|
||||
If MsgBox("파일목록 수집오류가 발생하였습니다 " + vbCrLf + "다시시도 하시겠습니까?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, "확인") = MsgBoxResult.Yes Then
|
||||
재시도 = True
|
||||
GoTo retryFileSearch
|
||||
Else
|
||||
MsgBox("현재목록을 가지고 진행합니다", MsgBoxStyle.Information, "확인")
|
||||
End If
|
||||
End If
|
||||
|
||||
Addlog2("전체 그림파일 수 : " & MDiMain.DataSet1.FileList.Rows.Count & "개")
|
||||
PLog.Add(String.Format("Total Image Count : {0}", MDiMain.DataSet1.FileList.Rows.Count))
|
||||
|
||||
If MDiMain.DataSet1.FileList.Rows.Count = 0 Then '//목록이 하나도없다
|
||||
MsgBox("지정된 작업폴더내에 가능한 그림파일이 존재하지않습니다" & vbCrLf & "더이상 진행을 할 수 없습니다", MsgBoxStyle.Critical, "확인")
|
||||
Return False
|
||||
End If
|
||||
|
||||
'//중간분리자
|
||||
MDiMain.AddScheduleDiv("원본목록 작성")
|
||||
Application.DoEvents()
|
||||
|
||||
'//원본목록작성
|
||||
MDiMain.MSG("원본목록 작성")
|
||||
Dim SrcTxt As String
|
||||
Dim StartIndex As Integer = getSP()
|
||||
PLog.Add(String.Format("Make SourceList Range {0}~{1}", StartIndex, Ep))
|
||||
MDiMain.Noti("원본목록작성")
|
||||
For i As Integer = StartIndex To Ep
|
||||
MDiMain.ShowCnt1(i, Ep, "원본목록 작성중")
|
||||
SrcTxt = MDiMain.Get_SrcFileList(i + 1)
|
||||
If SrcTxt <> "" AndAlso SrcTxt <> "*" And SrcTxt <> "?" Then
|
||||
MDiMain.DataSet1.SrcList.Rows.Add(New String() {SrcTxt})
|
||||
End If
|
||||
Application.DoEvents()
|
||||
Next
|
||||
Addlog2("원본목록 수 : " & MDiMain.DataSet1.SrcList.Rows.Count & "개")
|
||||
PLog.Add(String.Format("Source List Count ={0}", MDiMain.DataSet1.SrcList.Count))
|
||||
|
||||
|
||||
'//중간분리자
|
||||
MDiMain.AddScheduleDiv("작업목록 작성")
|
||||
Application.DoEvents()
|
||||
|
||||
'//이제 원본목록을 파일목로에서 검색한다. 데이터테이블의 Like 를 이요하면된다.
|
||||
'//그리고 검색된것들은 worklist 로보낸다.
|
||||
MDiMain.Noti("작업목록 작성")
|
||||
If GetrunType() = E_Runtype.Delete Then
|
||||
DeleteFileM(Param)
|
||||
Application.DoEvents()
|
||||
Else
|
||||
MoveFileM(Param)
|
||||
Application.DoEvents()
|
||||
End If
|
||||
|
||||
Addlog2("작업목록 : " & MDiMain.DataSet1.WorkList.Rows.Count & "개")
|
||||
Return True
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
''' <summary>
|
||||
''' 지정된 FTP로부터 파일목록을 수신한다
|
||||
''' </summary>
|
||||
''' <param name="Di"></param>
|
||||
''' <remarks></remarks>
|
||||
Public Function SearchFTP(ByRef Param As RunParam, ByRef lvitem As ListViewItem, ByVal Di As String, ByRef erMsg As String, ByRef NotFound As Boolean, ByRef filecnt As Integer) As Boolean
|
||||
|
||||
Di = Di.Replace("ftp:/", "").Replace("//", "/")
|
||||
If Not Di.StartsWith("/") Then Di = "/" + Di
|
||||
If Di.EndsWith("/") Then Di = Di.Substring(0, Di.Length - 1)
|
||||
If Di.IndexOf("-원본") = -1 Then
|
||||
|
||||
PLog.Add(String.Format("FTP 목록조회 : {0}", Di))
|
||||
|
||||
'//FTP캐쉬폴더가 있다면 그것을 사용한다.(우선은 파일목록에대한 작업이다)
|
||||
Dim CacheDirName As String = PathJob + "\" + FTPServer + "\" + Di.Replace("/", "\") + "\summary.txt"
|
||||
CacheDirName = CacheDirName.Replace("\\", "\")
|
||||
|
||||
'//수집된파일목록
|
||||
Dim filelist As New List(Of String)
|
||||
Dim SubDirList As New List(Of String)
|
||||
Dim 이어하기 As Boolean = False
|
||||
|
||||
'//파일목록수집(기존정보의 사용이 허가된 경우 캐쉬파일에서 정보를 읽는다
|
||||
If Param.Replay AndAlso System.IO.File.Exists(CacheDirName) Then
|
||||
Dim SumFile As New ArinSetting.ArinSetting(CacheDirName)
|
||||
Dim 파일목록 As String = SumFile.Data("file", "list")
|
||||
For Each 파일 As String In 파일목록.Split(",")
|
||||
If String.IsNullOrEmpty(파일) Then Continue For
|
||||
If filelist.IndexOf(파일) = -1 Then filelist.Add(파일)
|
||||
Next
|
||||
Application.DoEvents()
|
||||
Dim 하위폴더목록 As String = SumFile.Data("subdir", "list")
|
||||
For Each 파일 As String In 하위폴더목록.Split(",")
|
||||
If String.IsNullOrEmpty(파일) Then Continue For
|
||||
If SubDirList.IndexOf(파일) = -1 Then SubDirList.Add(파일)
|
||||
Next
|
||||
If filelist.Count > 0 Then 이어하기 = True
|
||||
Application.DoEvents()
|
||||
End If
|
||||
|
||||
'//파일목록이 불러와진게 없다면 FTP에서 조회를 시작한다.
|
||||
If filelist.Count < 1 Then
|
||||
|
||||
Dim isErr As Boolean = False
|
||||
Dim ErrMsg As String = ""
|
||||
Dim dirlist As FTPClients.FTPdirectory
|
||||
Try
|
||||
dirlist = FTP_0.ListDirectoryDetail(Di)
|
||||
Catch exw As System.Net.WebException
|
||||
|
||||
If TypeOf (exw.Response) Is System.Net.FtpWebResponse Then
|
||||
|
||||
PLog.Add("FTP목록조회오류(WEBEX) : " + exw.Message, True)
|
||||
Dim ftpdesc As String = CType(exw.Response, System.Net.FtpWebResponse).StatusDescription
|
||||
If ftpdesc.ToLower.IndexOf("directory not found") <> -1 Then
|
||||
PLog.Add("폴더없음 오류코드이므로 정상 처리로 한다", True)
|
||||
NotFound = True
|
||||
erMsg = ftpdesc
|
||||
|
||||
lvitem.SubItems(2).Text = "폴더가 존재하지 않습니다"
|
||||
lvitem.SubItems(3).Text = "완료"
|
||||
lvitem.BackColor = Color.White '//성공했다
|
||||
lvitem.ForeColor = Color.DimGray
|
||||
Return False
|
||||
Else
|
||||
erMsg = exw.Message
|
||||
lvitem.SubItems(2).Text = exw.Message
|
||||
lvitem.SubItems(3).Text = "오류"
|
||||
lvitem.BackColor = Color.Red
|
||||
lvitem.ForeColor = Color.White
|
||||
Return False
|
||||
End If
|
||||
Else
|
||||
PLog.Add("FTP목록조회오류(WEBEX-2) : " + exw.Message, True)
|
||||
erMsg = exw.Message
|
||||
lvitem.SubItems(2).Text = exw.Message
|
||||
lvitem.SubItems(3).Text = "오류"
|
||||
lvitem.BackColor = Color.Red
|
||||
lvitem.ForeColor = Color.White
|
||||
Return False
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
PLog.Add("FTP목록조회오류(기타) : " + ex.Message, True)
|
||||
erMsg = ex.Message
|
||||
lvitem.SubItems(2).Text = ex.Message
|
||||
lvitem.SubItems(3).Text = "오류"
|
||||
lvitem.BackColor = Color.Red
|
||||
lvitem.ForeColor = Color.White
|
||||
Return False
|
||||
End Try
|
||||
|
||||
Application.DoEvents()
|
||||
|
||||
'//파일목록을 저장해서 캐쉬로사용하도록 한다.
|
||||
Dim sb_FileList As New System.Text.StringBuilder
|
||||
Dim fcnt1 As UInteger = 0
|
||||
For Each info As FTPClients.FTPfileInfo In dirlist.GetFiles(Param.확장자)
|
||||
If info.FileType <> FTPClients.FTPfileInfo.DirectoryEntryTypes.File Then Continue For
|
||||
fcnt1 += 1
|
||||
sb_FileList.Append("," + info.Filename)
|
||||
filelist.Add(info.Filename)
|
||||
'//If filelist.Count Mod 50 = 0 Then
|
||||
Application.DoEvents() '//160831
|
||||
'//End If
|
||||
Next
|
||||
|
||||
''//ftp에러 오류없이 처리되었따
|
||||
'lvitem.ForeColor = Color.Black
|
||||
'lvitem.SubItems(2).Text = fcnt1.ToString()
|
||||
'lvitem.SubItems(3).Text = "완료"
|
||||
'If fcnt1 < 1 Then
|
||||
' lvitem.BackColor = Color.WhiteSmoke '//성공했지만 파일은 없었다
|
||||
'Else
|
||||
' lvitem.BackColor = Color.LightGreen '//성공했다
|
||||
'End If
|
||||
|
||||
'//캐쉬파일을 생성해준다. 160716
|
||||
Dim fiCache As New System.IO.FileInfo(CacheDirName)
|
||||
If Not fiCache.Directory.Exists Then fiCache.Directory.Create()
|
||||
Dim summary As New ArinSetting.ArinSetting(fiCache.FullName)
|
||||
If Not summary.Exist Then summary.CreateFile()
|
||||
summary.Data("file", "count", "") = fcnt1.ToString()
|
||||
summary.Data("file", "list", "") = sb_FileList.ToString()
|
||||
|
||||
Application.DoEvents()
|
||||
Dim foldlist2 As New System.Text.StringBuilder
|
||||
For Each info As FTPClients.FTPfileInfo In dirlist.GetDirectories
|
||||
SubDirList.Add(info.NameOnly)
|
||||
foldlist2.Append("," + info.NameOnly)
|
||||
Next
|
||||
|
||||
'//하위목록도 저장해준다.
|
||||
summary.Data("subdir", "count", "") = SubDirList.Count.ToString()
|
||||
summary.Data("subdir", "list", "") = foldlist2.ToString()
|
||||
summary.Save()
|
||||
Application.DoEvents()
|
||||
End If
|
||||
|
||||
'//수집된 파일목록을 데이터테이블에 기록한다.
|
||||
Dim fcnt As Integer = 0
|
||||
For Each File As String In filelist
|
||||
fcnt += 1
|
||||
MDiMain.MSG(MDiMain.DataSet1.FileList.Rows.Count & "개의 파일정보를 수집했습니다")
|
||||
MDiMain.DataSet1.FileList.Rows.Add(New String() {Di, File})
|
||||
Application.DoEvents()
|
||||
Next
|
||||
filecnt += fcnt
|
||||
lvitem.SubItems(2).Text = String.Format("{0}", fcnt)
|
||||
|
||||
If 이어하기 Then
|
||||
lvitem.SubItems(3).Text = "통과"
|
||||
lvitem.BackColor = Color.LightSkyBlue
|
||||
Else
|
||||
lvitem.SubItems(3).Text = "완료"
|
||||
lvitem.BackColor = Color.LightGreen '//성공했다
|
||||
End If
|
||||
|
||||
If fcnt = 0 Then
|
||||
lvitem.ForeColor = Color.Gray
|
||||
Else
|
||||
lvitem.ForeColor = Color.Black
|
||||
End If
|
||||
|
||||
|
||||
PLog.Add(String.Format("폴더검색결과({0}) 파일={1},폴더={2}", Di, filelist.Count, SubDirList.Count))
|
||||
MDiMain.MSG(MDiMain.DataSet1.FileList.Rows.Count & "개의 파일정보를 수집했습니다")
|
||||
Application.DoEvents()
|
||||
|
||||
'//해당폴더의 서브폴더를 체크하도록 하였다면?
|
||||
If GetSubDir() Then
|
||||
|
||||
'//여기서 폴더정보를 다시 수집한다.
|
||||
For Each DD As String In SubDirList
|
||||
Dim subpath As String = Di + "/" + DD
|
||||
subpath = subpath.Replace("//", "/")
|
||||
subpath = subpath.Replace("\", "/")
|
||||
PLog.Add(String.Format("Entering Subdir : {0}", subpath))
|
||||
|
||||
Dim fnotfound As Boolean
|
||||
Dim filecount As Integer
|
||||
Dim lvitemS As ListViewItem = MDiMain.lvSchedule.Items.Add("검색")
|
||||
lvitemS.SubItems.Add(subpath)
|
||||
lvitemS.SubItems.Add("FTP 파일명수집")
|
||||
lvitemS.SubItems.Add("대기")
|
||||
lvitemS.SubItems.Add("-")
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
Application.DoEvents()
|
||||
|
||||
Dim RetryCount As Integer = 0
|
||||
RETRYFTP:
|
||||
|
||||
If Not SearchFTP(Param, lvitemS, subpath, erMsg, fnotfound, filecount) Then
|
||||
If Not fnotfound Then
|
||||
'//오류가발생했지만 오류내용이 없다는 오류이다.(정상처리해야함)
|
||||
If RetryCount <= MaxRetryCount Then
|
||||
lvitem.ForeColor = Color.DarkMagenta
|
||||
lvitem.SubItems(3).Text = String.Format("{0}/{1}", RetryCount, MaxRetryCount)
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
PLog.Add(String.Format("재시도를 위해서 다음 시간을 기다림 : {0}ms", RetrySleeptime))
|
||||
Threading.Thread.Sleep(RetrySleeptime)
|
||||
Application.DoEvents()
|
||||
GoTo RETRYFTP
|
||||
Else
|
||||
lvitem.ForeColor = Color.White
|
||||
lvitem.BackColor = Color.DarkRed
|
||||
lvitem.SubItems(3).Text = "오류"
|
||||
MDiMain.lvSchedule.Refresh()
|
||||
Application.DoEvents()
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
Else
|
||||
PLog.Add("SearchFTP Skip : " + Di)
|
||||
End If
|
||||
Return True
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 해당디렉토리로부터 파일정보를 수집한다
|
||||
''' </summary>
|
||||
''' <param name="Di"></param>
|
||||
''' <remarks></remarks>
|
||||
Public Function SearchDir(ByRef Param As RunParam, ByVal Di As DirectoryInfo) As Boolean
|
||||
If Di.Exists = False Then
|
||||
PLog.Add("폴더내파일검색 : 폴더없음 : " + Di.FullName, True)
|
||||
Return False
|
||||
End If
|
||||
|
||||
If Di.FullName.IndexOf("-원본") = -1 Then
|
||||
|
||||
PLog.Add("폴더내 파일검색 : " + Di.FullName)
|
||||
|
||||
Try
|
||||
Dim FI() As FileInfo = Di.GetFiles("*." + Param.확장자)
|
||||
For Each F As FileInfo In FI
|
||||
MDiMain.MSG(MDiMain.DataSet1.FileList.Rows.Count & "개의 파일정보를 수집했습니다")
|
||||
MDiMain.DataSet1.FileList.Rows.Add(New String() {F.DirectoryName, F.Name})
|
||||
Application.DoEvents()
|
||||
Next
|
||||
Application.DoEvents()
|
||||
If GetSubDir() Then
|
||||
For Each DD As DirectoryInfo In Di.GetDirectories
|
||||
SearchDir(Param, DD)
|
||||
Next
|
||||
End If
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
MsgBox("폴더정보를 불러오는데 실패했습니다" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Information, "확인")
|
||||
Return False
|
||||
End Try
|
||||
Else
|
||||
PLog.Add("폴더내파일검색 : 원본폴더로인한 통과 : " + Di.FullName, True)
|
||||
Return False
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
End Module
|
||||
182
DriveInfo/모듈/Mod_Backup.vb
Normal file
182
DriveInfo/모듈/Mod_Backup.vb
Normal file
@@ -0,0 +1,182 @@
|
||||
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
|
||||
494
DriveInfo/모듈/Mod_Move.vb
Normal file
494
DriveInfo/모듈/Mod_Move.vb
Normal file
@@ -0,0 +1,494 @@
|
||||
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
|
||||
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(GetWorkDIr.Length)))
|
||||
NR.대상경로 = DesFile.DirectoryName
|
||||
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 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
|
||||
|
||||
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
|
||||
330
DriveInfo/모듈/Pub.vb
Normal file
330
DriveInfo/모듈/Pub.vb
Normal file
@@ -0,0 +1,330 @@
|
||||
Imports System.Data
|
||||
|
||||
Module Pub
|
||||
|
||||
Structure Str_Macro
|
||||
Dim FileName As String
|
||||
Dim Desc As String
|
||||
End Structure
|
||||
|
||||
'//일반변수
|
||||
Public PLog As ArinLog.ArinLog
|
||||
|
||||
Public PathTempDown As String
|
||||
Public PathMacro As String
|
||||
Public PathJob As String
|
||||
Public PathList As String
|
||||
|
||||
Public MacroPattern As String = "fileinfo"
|
||||
Public IniFile As String
|
||||
Public Prev_file As System.IO.FileInfo
|
||||
|
||||
Public MaxRetryCount As Integer = 20 '//ftp 재시도 횟수 (10회 재시도 후 실패시에는 우선 넘어간다)
|
||||
Public RetrySleeptime As Integer = 2000
|
||||
|
||||
'//FTP변수
|
||||
Public FTPServer As String = "127.0.0.1"
|
||||
Public FTPID As String = "anonymous"
|
||||
Public FTPPW As String = ""
|
||||
Public FTPPort As Integer = 21
|
||||
Public FTPPath As String = ""
|
||||
Public FTPPassive As Boolean = False
|
||||
Public FTPUTF8 As Boolean = False
|
||||
|
||||
Public Enum EJobCmdType
|
||||
copy = 0
|
||||
move = 1
|
||||
delete = 2
|
||||
End Enum
|
||||
Public Structure SJobCommand
|
||||
Dim Mode As E_Runtype
|
||||
Dim SrcDir As String
|
||||
Dim SrcFile As String
|
||||
Dim DesDir As String
|
||||
Dim DesFile As String
|
||||
Dim isFTP As Boolean
|
||||
End Structure
|
||||
|
||||
Public Function FileCheckSum(fn As String) As String
|
||||
Dim _md5 As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create()
|
||||
Using stream As System.IO.FileStream = File.OpenRead(fn)
|
||||
Dim checksum() As Byte = _md5.ComputeHash(stream)
|
||||
Return BitConverter.ToString(checksum).Replace("-", String.Empty)
|
||||
End Using
|
||||
Return "CHKERR"
|
||||
End Function
|
||||
|
||||
Public Sub init()
|
||||
|
||||
'//공용로그값
|
||||
PLog = New ArinLog.ArinLog()
|
||||
|
||||
'//공용변수
|
||||
Prev_file = Nothing
|
||||
|
||||
'//기본경로
|
||||
PathMacro = My.Application.Info.DirectoryPath & "\macro\" & MacroPattern
|
||||
PathJob = My.Application.Info.DirectoryPath & "\Job"
|
||||
PathList = My.Application.Info.DirectoryPath & "\List"
|
||||
|
||||
'//작업용폴더확인
|
||||
If Not System.IO.Directory.Exists(PathJob) Then System.IO.Directory.CreateDirectory(PathJob)
|
||||
If Not System.IO.Directory.Exists(PathMacro) Then System.IO.Directory.CreateDirectory(PathMacro)
|
||||
If Not System.IO.Directory.Exists(PathList) Then System.IO.Directory.CreateDirectory(PathList)
|
||||
|
||||
'//파일변수
|
||||
IniFile = My.Application.Info.DirectoryPath & "\macro\" & MacroPattern & "\default.ini"
|
||||
|
||||
End Sub
|
||||
|
||||
'''입력문자열이 파일로 변환되는지?
|
||||
Public Function isFileName(fn As String) As Boolean
|
||||
Try
|
||||
Dim fi As New System.IO.FileInfo(fn)
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function DirCreate(path As String) As Boolean
|
||||
Try
|
||||
System.IO.Directory.CreateDirectory(path)
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
PLog.Add(ArinLog.ArinLog.ETYPE.ERROR, "폴더생성실패(" + path + ") " + ex.Message, True)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
'Public _ParseFormats As String() = { _
|
||||
' "(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{4})\s+(?<name>.+)", _
|
||||
' "(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\d+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{4})\s+(?<name>.+)", _
|
||||
' "(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\d+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)", _
|
||||
' "(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)", _
|
||||
' "(?<dir>[\-dl])(?<permission>([\-r][\-w][\-xs]){3})(\s+)(?<size>(\d+))(\s+)(?<ctbit>(\w+\s\w+))(\s+)(?<size2>(\d+))\s+(?<timestamp>\w+\s+\d+\s+\d{2}:\d{2})\s+(?<name>.+)", _
|
||||
' "(?<timestamp>\d{2}\-\d{2}\-\d{2}\s+\d{2}:\d{2}[Aa|Pp][mM])\s+(?<dir>\<\w+\>){0,1}(?<size>\d+){0,1}\s+(?<name>.+)"}
|
||||
|
||||
'Public Function GetMatchingRegex(ByVal line As String) As System.Text.RegularExpressions.Match
|
||||
' Dim rx As System.Text.RegularExpressions.Regex, m As System.Text.RegularExpressions.Match
|
||||
' For i As Integer = 0 To _ParseFormats.Length - 1
|
||||
' rx = New System.Text.RegularExpressions.Regex(_ParseFormats(i))
|
||||
' m = rx.Match(line)
|
||||
' If m.Success Then Return m
|
||||
' Next
|
||||
' Return Nothing
|
||||
'End Function
|
||||
|
||||
'Public Enum SFtpType
|
||||
' Link = 0
|
||||
' File = 1
|
||||
' Dir = 2
|
||||
'End Enum
|
||||
|
||||
'Public Structure SFTPDetail
|
||||
' Dim FileType As SFtpType
|
||||
' Dim FileName As String
|
||||
' Dim Size As Long
|
||||
' Dim Permission As String
|
||||
' Dim TimeStamp As String
|
||||
'End Structure
|
||||
|
||||
'Public Function FtpDirParser(dirList() As String) As List(Of SFTPDetail)
|
||||
' Dim retval As New List(Of SFTPDetail)
|
||||
' For Each line As String In dirList
|
||||
' Dim m As System.Text.RegularExpressions.Match = GetMatchingRegex(line)
|
||||
' If Not m Is Nothing Then
|
||||
|
||||
' Dim newdr As New SFTPDetail
|
||||
|
||||
' Dim name As String = m.Groups("name").Value
|
||||
' Dim perm As String = m.Groups("poermission").Value
|
||||
' Dim _dir As String = m.Groups("dir").Value
|
||||
' newdr.TimeStamp = m.Groups("timestamp").Value
|
||||
|
||||
' Dim filetype As String = ""
|
||||
' Dim size As Long = 0
|
||||
' If _dir.ToLower = "l" Then
|
||||
' filetype = "LINK"
|
||||
' size = 0
|
||||
' newdr.FileType = SFtpType.Link
|
||||
' ElseIf _dir.ToLower = "d" OrElse _dir.ToLower = "<dir>" Then
|
||||
' filetype = "DIR"
|
||||
' size = 0
|
||||
' newdr.FileType = SFtpType.Dir
|
||||
' Else
|
||||
' filetype = "FILE"
|
||||
' size = Long.Parse(m.Groups("size").Value)
|
||||
' newdr.FileType = SFtpType.File
|
||||
' End If
|
||||
|
||||
' newdr.Permission = perm
|
||||
' newdr.FileName = name
|
||||
|
||||
' newdr.Size = size
|
||||
' retval.Add(newdr)
|
||||
' End If
|
||||
' Next
|
||||
' Return retval
|
||||
'End Function
|
||||
|
||||
Public FTP_0 As FTPClients.Client_2
|
||||
|
||||
Public Enum E_DesDirType
|
||||
desPath = 1 '//대상폴더
|
||||
CustomPath = 2 '//조합에의한 폴더
|
||||
End Enum
|
||||
Public Enum E_baktype
|
||||
none = 0
|
||||
Folder1 = 1
|
||||
CurrnetFolder = 2
|
||||
ParentFolder = 3
|
||||
End Enum
|
||||
Structure S_Log
|
||||
Dim Result As Char
|
||||
Dim OrgFile As String
|
||||
Dim DesFile As String
|
||||
Dim Orgpath As String
|
||||
Dim DesPath As String
|
||||
Dim Msg As String
|
||||
End Structure
|
||||
Enum E_Runtype
|
||||
Copy = 0
|
||||
Delete = 1
|
||||
Move = 2
|
||||
End Enum
|
||||
|
||||
Public Log As ArrayList
|
||||
Public log2 As ArrayList
|
||||
Public Fileok As ArrayList '//성공한 파일목록
|
||||
Public Ep As String
|
||||
Public BakTag As String = "-원본(" & Format(Now, "MMdd") & ")" '& "_MOV_D"
|
||||
|
||||
Public Function GetBakDir1() As String
|
||||
Return MDiMain.tb_bakdir1.Text
|
||||
End Function
|
||||
|
||||
Public Function SaveExcelFile(fn As String, dt As DataTable)
|
||||
Dim fp As New FarPoint.Win.Spread.FpSpread()
|
||||
fp.DataSource = dt
|
||||
Return fp.SaveExcel(fn, FarPoint.Excel.ExcelSaveFlags.SaveBothCustomRowAndColumnHeaders)
|
||||
End Function
|
||||
|
||||
|
||||
Public Function GetBackType1() As E_baktype
|
||||
Select Case MDiMain.cbBakType.SelectedIndex
|
||||
Case 0
|
||||
Return E_baktype.none
|
||||
Case 1
|
||||
Return E_baktype.Folder1
|
||||
Case 2
|
||||
Return E_baktype.CurrnetFolder
|
||||
Case 3
|
||||
Return E_baktype.ParentFolder
|
||||
End Select
|
||||
'If MDiMain.btBakNo.Pressed Then
|
||||
' Return E_baktype.none
|
||||
'ElseIf MDiMain.btBakSrc.Pressed Then
|
||||
' Return E_baktype.CurrnetFolder
|
||||
'ElseIf MDiMain.btBakUpDir.Pressed Then
|
||||
' Return E_baktype.ParentFolder
|
||||
'Else
|
||||
' Return E_baktype.Folder1
|
||||
'End If
|
||||
End Function
|
||||
|
||||
Public Function GetrunType() As E_Runtype
|
||||
If MDiMain.btDel.Pressed Then
|
||||
Return 1
|
||||
ElseIf MDiMain.btMove.Pressed Then
|
||||
Return 2
|
||||
Else
|
||||
Return 0
|
||||
End If
|
||||
End Function
|
||||
Public Function GetWorkDIr() As String
|
||||
Try
|
||||
Return CStr(MDiMain.tb_workdir.Text).Replace("\\", "\").Replace("//", "/")
|
||||
Catch ex As Exception
|
||||
Return "작업폴더에 문제가있습니다"
|
||||
End Try
|
||||
End Function
|
||||
Public Function GetExtendFromMdi() As String
|
||||
Try
|
||||
Return "*." & MDiMain.tb_ext.Text
|
||||
Catch ex As Exception
|
||||
Return "*.*"
|
||||
End Try
|
||||
End Function
|
||||
Public Function GetExtendOnly() As String
|
||||
|
||||
Return MDiMain.tb_ext.Text
|
||||
|
||||
End Function
|
||||
Public Function GetSubDir() As Boolean
|
||||
Try
|
||||
Return MDiMain.chk_subdir.Checked
|
||||
Catch ex As Exception
|
||||
Return True
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function GetSubdirType() As Short
|
||||
If MDiMain.chk_subdir.Checked Then
|
||||
Return 1
|
||||
Else
|
||||
Return 0
|
||||
End If
|
||||
End Function
|
||||
|
||||
Public MyINI As New CommonClassv2.MyINI(My.Application.Info.DirectoryPath & "\main.ini")
|
||||
Public Arin As New CommonClassv2.ARINCLASS
|
||||
|
||||
Public Sub Addlog(ByVal 성공여부 As String, ByVal 원본파일 As String, ByVal 대상파일 As String, ByVal 메세지 As String, Optional ByVal reset As Boolean = False)
|
||||
If reset Then Log = New ArrayList
|
||||
Log.Add(성공여부 & "/" & 원본파일 & "/" & 대상파일 & "/" & 메세지)
|
||||
End Sub
|
||||
|
||||
Public Sub Addlog2(ByVal msg As String, Optional ByVal reset As Boolean = False)
|
||||
If reset Then log2 = New ArrayList
|
||||
log2.Add(">> " & msg)
|
||||
'Frm_log.RichTextBox1.AppendText(">> " & msg)
|
||||
'Frm_log.RichTextBox1.AppendText(vbCrLf)
|
||||
End Sub
|
||||
Public Sub makelog2(ByVal msg As String)
|
||||
Try
|
||||
Form_Status.RichTextBox1.AppendText(msg)
|
||||
Form_Status.RichTextBox1.AppendText(vbCrLf)
|
||||
Catch ex As Exception
|
||||
|
||||
End Try
|
||||
|
||||
End Sub
|
||||
|
||||
Public Sub MakeBakLog1()
|
||||
Form_Status.RichTextBox2.Clear()
|
||||
For Each Msg As String In Backupfolder1
|
||||
Form_Status.RichTextBox2.AppendText(Msg)
|
||||
Form_Status.RichTextBox2.AppendText(vbCrLf)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
|
||||
|
||||
Public Function getSP() As Integer
|
||||
If String.IsNullOrEmpty(MDiMain.tb_sttrange.Text) Then MDiMain.tb_sttrange.Text = "1"
|
||||
Return MDiMain.tb_sttrange.Text '//목록에서 시작줄번호
|
||||
End Function
|
||||
|
||||
Public Sub Errlog(ByVal amsg As String)
|
||||
Dim Fs As New System.IO.FileStream(My.Application.Info.DirectoryPath & "\error.txt", FileMode.Create)
|
||||
Dim Sw As New System.IO.StreamWriter(Fs, System.Text.Encoding.Default)
|
||||
Sw.WriteLine("시간:" & Now.ToShortDateString & ":" & Now.ToShortTimeString & vbCrLf & amsg)
|
||||
Sw.Close()
|
||||
Sw.Dispose()
|
||||
Fs.Close()
|
||||
Fs.Dispose()
|
||||
End Sub
|
||||
|
||||
|
||||
End Module
|
||||
183
DriveInfo/모듈/mod_Delete.vb
Normal file
183
DriveInfo/모듈/mod_Delete.vb
Normal file
@@ -0,0 +1,183 @@
|
||||
Imports System.IO
|
||||
Imports System.Threading
|
||||
Imports System.Data
|
||||
|
||||
Module Mod_Delete
|
||||
'Public Sub DeleteFile()
|
||||
' DeleteFileFromList()
|
||||
'End Sub
|
||||
|
||||
'Public Sub DeleteFileFromList() '//파일목록으로부터 삭제대상폴더의 파일을 삭제한다.
|
||||
' Dim FileList As New ArrayList
|
||||
' Dim FI() As FileInfo
|
||||
' Dim Di As DirectoryInfo
|
||||
|
||||
' If MsgBox("파일삭제작업을 진행하시겠습니까?", MsgBoxStyle.Information + MsgBoxStyle.OkCancel, "삭제확인") <> MsgBoxResult.Ok Then
|
||||
' MsgBox("취소되었습니다", MsgBoxStyle.Information, "확인")
|
||||
' Return
|
||||
' End If
|
||||
|
||||
' '//파일목록을 작성합니다.
|
||||
' MSG("삭제 진행중...")
|
||||
' MDiMain.pbar2.Minimum = 0
|
||||
' MDiMain.pbar2.Maximum = Ep
|
||||
' MDiMain.Refresh()
|
||||
|
||||
' Addlog2("삭제시작 줄번호 범위 " & SP & " ~ " & Ep, True)
|
||||
|
||||
' Dim NullCnt As Short = 0
|
||||
' Dim fn As String
|
||||
|
||||
' For i As Integer = SP To Ep
|
||||
' MDiMain.pbar2.Value = i
|
||||
' If i Mod 10 = 0 Then
|
||||
' MSG("삭제중 (" & i & "/" & Ep & ")")
|
||||
' MDiMain.Refresh()
|
||||
' End If
|
||||
|
||||
' fn = Frm_srcfile.Get_FileList(i + 1) & Mod_Comm.GetExtendFromMdi.Trim("*")
|
||||
' If fn.Trim <> "" Then
|
||||
' NullCnt = 0 '//파일을 삭제하는 루틴을 만든다.
|
||||
' Di = New DirectoryInfo(GetWorkDIr) '//경로선택
|
||||
' FI = Di.GetFiles(fn, GetSubdirType)
|
||||
' If FI.Length < 1 Then
|
||||
' addlog("X", fn, "", "파일없음")
|
||||
' End If
|
||||
|
||||
' For Each F As FileInfo In FI '//일치하는 모든 파일을 삭제한다.
|
||||
' If F.FullName.IndexOf("-원본") = -1 Then '//백업이 만들어놓은 폴더의 파일은 제낀다.
|
||||
' Fileok.Add(F.FullName) '//정상파일목록을 가진다.
|
||||
' addlog("O", F.FullName, "", "삭제")
|
||||
' If Mod_Comm.GetExeType Then ''//모의실행은 백업및 작업을 하지않는다.
|
||||
' '//백업정책을 확인해서 해당 파일을 백업할곳을 결정한다.
|
||||
' Check_Backup(F, BakTag)
|
||||
' F.Delete()
|
||||
' End If
|
||||
' End If
|
||||
' Next
|
||||
' Else
|
||||
' NullCnt += 1
|
||||
' If NullCnt = 5 Then '//빈줄이나올때 널카운트를 증가시키고 빈줄이 5번연속나올때는 빠져나온다.
|
||||
' Exit For
|
||||
' End If
|
||||
' End If
|
||||
' Next
|
||||
' Addlog2("삭제작업이 완료되었습니다")
|
||||
' 'Frm_Wait.Hide()
|
||||
'End Sub
|
||||
Public Sub DeleteFileM(Param As RunParam) '//파일목록으로부터 삭제대상폴더의 파일을 삭제한다.
|
||||
'//파일목록을 작성합니다.
|
||||
MDiMain.MSG("삭제목록 작성중...")
|
||||
|
||||
'//변수목록
|
||||
Dim NR As ireaDataSet.WorkListRow
|
||||
Dim WRow() As ireaDataSet.FileListRow
|
||||
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.SrcList Is Nothing Then
|
||||
MsgBox("파일목록이 존재하지않습니다." & vbCrLf & "진행할 수 없습니다", MsgBoxStyle.Information, "확인")
|
||||
Return
|
||||
End If
|
||||
|
||||
index += 1
|
||||
Application.DoEvents()
|
||||
MDiMain.ShowCnt1(index, endcnt, "목록작성")
|
||||
'//전체목록에서 원본목록 검색
|
||||
WRow = MDiMain.DataSet1.FileList.Select("파일명 like '" & drs.목록명 & "'")
|
||||
If WRow.Length = 0 Then Addlog("X", drs.목록명, "", "파일없음")
|
||||
|
||||
For Each dr As ireaDataSet.FileListRow In WRow '//일치하는 목록들 작업목록에 집어넣는다.
|
||||
NR = MDiMain.DataSet1.WorkList.NewWorkListRow
|
||||
NR.원본경로 = dr.경로
|
||||
NR.원본파일명 = dr.파일명
|
||||
NR.구분 = "삭제"
|
||||
NR.대상경로 = dr.경로
|
||||
NR.대상파일명 = dr.파일명
|
||||
NR.오류 = ""
|
||||
If NR.대상파일명.IndexOf("*") = -1 AndAlso NR.대상파일명.IndexOf("?") = -1 Then
|
||||
Try
|
||||
MDiMain.DataSet1.WorkList.Rows.Add(NR)
|
||||
Catch ex As Exception '//추가오류는 뻔하다이미 그 파일이 있는경우다.
|
||||
NR.오류 = "중복된 삭제대상파일입니다(" & Format(Now, "HHmmss") & ")"
|
||||
MDiMain.DataSet1.WorkList.Rows.Add(NR)
|
||||
makelog2("중복된 삭제대상파일이 생성되었습니다")
|
||||
makelog2(" 파일명 : " & NR.원본경로 & "\" & NR.원본파일명)
|
||||
'If MsgBox("중복된 대상파일이 확인되었습니다" & vbCrLf & vbCrLf & "계속하시겠습니까?", MsgBoxStyle.Information Or MsgBoxStyle.OkCancel, "확인") <> MsgBoxResult.Ok Then
|
||||
' Return
|
||||
'End If
|
||||
End Try
|
||||
End If
|
||||
Next
|
||||
Next
|
||||
MDiMain.MSG("삭제목록 작성완료...")
|
||||
|
||||
'If GetExeType() Then '//실제실행일경우
|
||||
' DeleteFileR()
|
||||
'Else '//모의실행일경우
|
||||
' Addlog2("모의실행 : 실제 복사/이동/삭제는 수행되지 않습니다")
|
||||
' MsgBox("모의실행입니다" & vbCrLf & "실제파일의 복사/이동/삭제 는 수행되지 않습니다", MsgBoxStyle.Information, "확인")
|
||||
'End If
|
||||
|
||||
End Sub
|
||||
|
||||
Public Sub DeleteFileR(winhide As Boolean) '//실제로 파일을 삭제합니다. 삭제시 성공여부를 기록합니다
|
||||
Dim FI As FileInfo
|
||||
Dim Err As Boolean = False
|
||||
|
||||
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, "파일삭제")
|
||||
Application.DoEvents()
|
||||
|
||||
If Dr.오류 <> "" Then
|
||||
Errlog("선오류감지되어서 넘어갑니다(" & Dr.오류 & ")")
|
||||
Else
|
||||
|
||||
Try
|
||||
FI = New FileInfo(CStr(Dr.원본경로 & "\" & Dr.원본파일명).Replace("\\", "\"))
|
||||
Check_Backup(FI, BakTag)
|
||||
If FI.Exists = False Then Dr.오류 = "파일없음"
|
||||
Try
|
||||
FI.Delete()
|
||||
Dr.성공 = "O"
|
||||
Dr.오류 = ""
|
||||
Catch ex As Exception
|
||||
Err = True
|
||||
Dr.성공 = "X"
|
||||
Dr.오류 = ex.Message.ToString()
|
||||
End Try
|
||||
Catch ex As Exception
|
||||
Err = True
|
||||
Dr.성공 = "X"
|
||||
Dr.오류 = ex.Message
|
||||
Errlog("FI = New FileInfo(CStr(Dr.원본경로 &)" & ex.Message.ToString)
|
||||
End Try
|
||||
|
||||
End If
|
||||
Next
|
||||
MDiMain.MSG("파일 [삭제] 완료" & IIf(Err, "(일부파일에 오류가 발생하였습니다", ""))
|
||||
End Sub
|
||||
|
||||
|
||||
End Module
|
||||
Reference in New Issue
Block a user