Powered By Blogger

關於我自己

我的相片
網站經營斷斷續續,現在以分享程式練習為主。 因為工作需要,不時會有練習程式的需要。 所以將自己練習的過程分享給大家。 如果有幫助到各位,那就太好了! 如果針對本人或網站內容有任何問題, 歡迎與我聯絡。

2016年7月30日 星期六

【VB.NET 語言】上報 練習 _ 完整程式碼分享

這篇就是前面分成八集,用來在天橋底下說書的程式完整內容。
請各位安心服用~~
小程式有史有末,端看完整程式碼也不一定看的出個所以然~
所以看看前面的介紹會幫助你懂得多一些!

底下就是這個連續劇程式分享的分段分享內容

1. 上報 練習 _ 選擇資料夾
2. 上報 練習 _ 寫一個 .XML 資料
3. 上報 練習 _ 監控資料夾
4. 上報 練習 _ 複製檔案
5. 上報 練習 _ FTP Server 檔案上傳
6. 上報 練習 _ 上傳錯誤紀錄
7. 上報 練習 _ 使用 BackgroundWorker 再次上傳
8. 上報 練習 _ Log 紀錄
9. 上報 練習 _ 完整程式碼分享


以上就是全部的小程式分享文章!!!!

下面就是最重的的完整程式碼~
那裏面有一些重複然後或是被註解的地方,請大家見諒~
因為這個小程式是居裡貓自己寫的,不是一次到位的完整~

--------------------------------------------------------------------------------------------------------------------------
  1. Imports System  
  2. Imports System.IO  
  3. Imports System.Xml.Serialization  
  4.   
  5. Public Class UploadReport  
  6.  
  7. #Region "Button Contorl Upload Report Folder"  
  8.   
  9.     'Select Local Folder  
  10.     Private Sub Btn_Local_Click(sender As Object, e As EventArgs) Handles Btn_Local.Click  
  11.         Dim Local_FolderBrowser As FolderBrowserDialog = New FolderBrowserDialog  
  12.         Local_FolderBrowser.ShowDialog()  
  13.         TxB_Local.Text = Local_FolderBrowser.SelectedPath  
  14.   
  15.     End Sub  
  16.     'Select Remote Folder  
  17.     Private Sub Btn_Remote_Click(sender As Object, e As EventArgs) Handles Btn_Remote.Click  
  18.         Dim Remote_FolderBrowser As FolderBrowserDialog = New FolderBrowserDialog  
  19.         Remote_FolderBrowser.ShowDialog()  
  20.         TxB_Remote.Text = Remote_FolderBrowser.SelectedPath  
  21.   
  22.     End Sub  
  23.     'Select NAS Folder  
  24.     Private Sub Btn_NAS_Click(sender As Object, e As EventArgs) Handles Btn_NAS.Click  
  25.         Dim NAS_FolderBrowser As FolderBrowserDialog = New FolderBrowserDialog  
  26.         NAS_FolderBrowser.ShowDialog()  
  27.         TxB_NAS.Text = NAS_FolderBrowser.SelectedPath  
  28.   
  29.     End Sub  
  30.     'Select FTP Folder  
  31.     Private Sub Btn_FTP_Click(sender As Object, e As EventArgs) Handles Btn_FTP.Click  
  32.         Dim FTP_FolderBrowser As FolderBrowserDialog = New FolderBrowserDialog  
  33.         FTP_FolderBrowser.ShowDialog()  
  34.         TxB_FTP.Text = FTP_FolderBrowser.SelectedPath  
  35.   
  36.     End Sub  
  37.  
  38. #End Region  
  39.   
  40.     'Button Contorl XML Write  
  41.     Private Sub Btn_WriteXML_Click(sender As Object, e As EventArgs) Handles Btn_WriteXML.Click  
  42.         'Check watch event was raising  
  43.         If Watcher.watcher.EnableRaisingEvents = False Then  
  44.             Watcher.watcher.EnableRaisingEvents = True  
  45.         End If  
  46.   
  47.         Copy_Delete_File.GetPath(TxB_Local.Text, TxB_Remote.Text, TxB_NAS.Text, TxB_FTP.Text, ChB_UploadFTP.Checked)  
  48.   
  49.         FTPupload.Get_FTPinfo(TxB_FTPAddress.Text, TxB_FTPAccount.Text, Txb_FTPPassword.Text)  
  50.   
  51.         Dim wrXML As New XML  
  52.         wrXML.LocalPath = TxB_Local.Text  
  53.         wrXML.RemotePath = TxB_Remote.Text  
  54.         wrXML.NASPath = TxB_NAS.Text  
  55.         wrXML.FTPPath = TxB_FTP.Text  
  56.         wrXML.Data = "This is a Programming Practices " & Now.ToString  
  57.         wrXML.DateTime = Now.ToString  
  58.         If ChB_UploadFTP.Checked Then  
  59.             wrXML.CheckFTP = "Ture"  
  60.         Else  
  61.             wrXML.CheckFTP = "Flase"  
  62.         End If  
  63.   
  64.         Dim objectStreamWriter As New StreamWriter(TxB_Local.Text + ("\Program Practices " & Now.ToString("_yyyyMMddHHmmss") & ".xml"))  
  65.         Dim xmlserialize As New XmlSerializer(wrXML.GetType)  
  66.         xmlserialize.Serialize(objectStreamWriter, wrXML)  
  67.         objectStreamWriter.Dispose()  
  68.   
  69.         'Check backwork status  
  70.         'If Not back.IsBusy = True Then  
  71.         '    back.RunWorkerAsync()  
  72.         'End If  
  73.         Backwork.main()  
  74.   
  75.     End Sub  
  76.     Public Shared back As New System.ComponentModel.BackgroundWorker  
  77.   
  78.     Private Sub UploadReport_Load(sender As Object, e As EventArgs) Handles MyBase.Load  
  79.         'At program started to run monitor folder programming  
  80.         Watcher.Main(TxB_Local.Text)  
  81.   
  82.         back.WorkerSupportsCancellation = True  
  83.         back.WorkerReportsProgress = True  
  84.   
  85.         AddHandler back.DoWork, AddressOf back_DoWork  
  86.   
  87.     End Sub  
  88.   
  89.     Private Sub UploadReport_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed  
  90.         'When formclosed do log xml write  
  91.         Dim log As New XML  
  92.         log.Loginfo = ErrorList.LogList  
  93.   
  94.         Dim logstreamwriter As New StreamWriter(TxB_Remote.Text + ("\Log" & Now.ToString(" _yyyyMMddHHmmss") & ".xml"))  
  95.         Dim logxmlserialize As New XmlSerializer(log.GetType)  
  96.         logxmlserialize.Serialize(logstreamwriter, log)  
  97.         logstreamwriter.Dispose()  
  98.   
  99.     End Sub  
  100.   
  101.     Private Sub back_DoWork(ByVal sender As ObjectByVal e As System.ComponentModel.DoWorkEventArgs)  
  102.         Dim retry As Boolean = True  
  103.         Dim retrytime As Integer = 0  
  104.         'Check upload NAS ro FTP  
  105.         If ChB_UploadFTP.Checked = False Then  
  106.             While retry  
  107.                 'Do upload to NAS back ground work  
  108.                 For i As Integer = 0 To ErrorList.CountNas - 1  
  109.                     Try  
  110.                         File.Copy(Copy_Delete_File.copypath + "\" + ErrorList.NASList(i), Copy_Delete_File.uptonas + "\" + ErrorList.NASList(i), True)  
  111.                         If ErrorList.CountNas = 0 Then  
  112.                             'If NasList count eaual 0, retry end  
  113.                             retry = False  
  114.                         Else  
  115.                             'retry not end and remove NasList now data then re do for  
  116.                             retry = True  
  117.                             ErrorList.RemoveNAS(i)  
  118.                             Exit For  
  119.                         End If  
  120.                     Catch ex As Exception  
  121.                         'Retry failure add retry times and error log  
  122.                         retry = True  
  123.                         retrytime += 1  
  124.                         'Console.WriteLine("Error list upload to NAS retry failured, back do work times : " & retrytime)  
  125.                         ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Error list upload to NAS retry failured, back do work times : " & retrytime)  
  126.                     End Try  
  127.                 Next  
  128.                 'If NasList count eaual 0, retry end  
  129.                 If ErrorList.CountNas = 0 Then  
  130.                     retry = False  
  131.                 End If  
  132.             End While  
  133.   
  134.         Else  
  135.   
  136.             While retry  
  137.                 For i As Integer = 0 To ErrorList.CountFtp - 1  
  138.                     Try  
  139.                         File.Copy(Copy_Delete_File.copypath + "\" + ErrorList.FTPList(i), Copy_Delete_File.uptoftp + "\" + ErrorList.FTPList(i), True)  
  140.                         System.Threading.Thread.Sleep(100)  
  141.                         FTPupload.uploadtoftp()  
  142.                         System.Threading.Thread.Sleep(100)  
  143.                         If ErrorList.CountFtp = 0 Then  
  144.                             'If NasList count eaual 0, retry end  
  145.                             retry = False  
  146.                         Else  
  147.                             'retry not end and remove NasList now data then re do for  
  148.                             retry = True  
  149.                             ErrorList.RemoveFTP(i)  
  150.                             Exit For  
  151.                         End If  
  152.                     Catch ex As Exception  
  153.                         'Retry failure add retry times and error log  
  154.                         retry = True  
  155.                         retrytime += 1  
  156.                         'Console.WriteLine("Error list upload to FTP retry failured, back do work times : " & retrytime)  
  157.                         ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Error list upload to FTP retry failured, back do work times : " & retrytime)  
  158.                     End Try  
  159.                 Next  
  160.                 'If NasList count eaual 0, retry end  
  161.                 If ErrorList.CountFtp = 0 Then  
  162.                     retry = False  
  163.                 End If  
  164.             End While  
  165.   
  166.         End If  
  167.     End Sub  
  168.     Private Sub back_Completes(ByVal sender As ObjectByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)  
  169.         'If ErrorList.CountNas = 0 Then  
  170.         '    back.CancelAsync()  
  171.         'Else  
  172.         '    back.RunWorkerAsync()  
  173.         'End If  
  174.     End Sub  
  175.   
  176. End Class  
  177.  
  178. #Region "XML Class setting"  
  179. 'About used XML setting info  
  180. Public Class XML  
  181.     Private _LoaclPath As String  
  182.     Public Property LocalPath() As String  
  183.         Get  
  184.             Return _LoaclPath  
  185.         End Get  
  186.         Set(value As String)  
  187.             _LoaclPath = value  
  188.         End Set  
  189.     End Property  
  190.     Private _RemotePath As String  
  191.     Public Property RemotePath() As String  
  192.         Get  
  193.             Return _RemotePath  
  194.         End Get  
  195.         Set(value As String)  
  196.             _RemotePath = value  
  197.         End Set  
  198.     End Property  
  199.     Private _NASPath As String  
  200.     Public Property NASPath() As String  
  201.         Get  
  202.             Return _NASPath  
  203.         End Get  
  204.         Set(value As String)  
  205.             _NASPath = value  
  206.         End Set  
  207.     End Property  
  208.     Private _FTPPath As String  
  209.     Public Property FTPPath() As String  
  210.         Get  
  211.             Return _FTPPath  
  212.         End Get  
  213.         Set(value As String)  
  214.             _FTPPath = value  
  215.         End Set  
  216.     End Property  
  217.     Private _Data As String  
  218.     Public Property Data() As String  
  219.         Get  
  220.             Return _Data  
  221.         End Get  
  222.         Set(value As String)  
  223.             _Data = value  
  224.         End Set  
  225.     End Property  
  226.     Private _DateTime As String  
  227.     Public Property DateTime() As String  
  228.         Get  
  229.             Return _DateTime  
  230.         End Get  
  231.         Set(value As String)  
  232.             _DateTime = value  
  233.         End Set  
  234.     End Property  
  235.     Private _CheckFTP As String  
  236.     Public Property CheckFTP() As String  
  237.         Get  
  238.             Return _CheckFTP  
  239.         End Get  
  240.         Set(value As String)  
  241.             _CheckFTP = value  
  242.         End Set  
  243.     End Property  
  244.     Private _Loginfo As List(Of String)  
  245.     Public Property Loginfo() As List(Of String)  
  246.         Get  
  247.             Return _Loginfo  
  248.         End Get  
  249.         Set(value As List(Of String))  
  250.             _Loginfo = value  
  251.         End Set  
  252.     End Property  
  253. End Class  
  254.  
  255. #End Region  
  256.  
  257.  
  258. #Region "Monitor Folder, used FileSystemWatcher"  
  259. 'About Monitor Foldaer  
  260. Public Class Watcher  
  261.   
  262.     Public Shared Sub Main(path As String)  
  263.         '"path" was monitored folder file path  
  264.         Run(path)  
  265.   
  266.     End Sub  
  267.     Public Shared watcher As New FileSystemWatcher()  
  268.     Private Shared Sub Run(p As String)  
  269.         'Create new FileSystemWatcher and set path  
  270.         watcher.Path = p  
  271.         'Only watch XML files  
  272.         watcher.Filter = "*.xml"  
  273.   
  274.         'AddHandler watcher.Changed, AddressOf OnChanged  
  275.         AddHandler watcher.Created, AddressOf OnCreated  
  276.         'AddHandler watcher.Deleted, AddressOf OnDeleted  
  277.         'AddHandler watcher.Renamed, AddressOf OnRenamed  
  278.   
  279.         'Begin watching  
  280.         watcher.EnableRaisingEvents = True  
  281.   
  282.     End Sub  
  283.     Private Shared Sub OnCreated(source As Object, e As FileSystemEventArgs)  
  284.         'When file was created  
  285.         Console.WriteLine("File : " & e.FullPath & " _ " & e.ChangeType)  
  286.         'When into here and then get now file name  
  287.         Copy_Delete_File.GetFileName(e.Name)  
  288.         System.Threading.Thread.Sleep(500)  
  289.         'Wait few second then do copyfile work  
  290.         Copy_Delete_File.copyfile()  
  291.     End Sub  
  292.     Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)  
  293.         'When file was changed  
  294.     End Sub  
  295.     Private Shared Sub OnDeleted(source As Object, e As FileSystemEventArgs)  
  296.         'When file was deleted  
  297.     End Sub  
  298.     Private Shared Sub OnRenamed(source As Object, e As RenamedEventArgs)  
  299.         'When file was renmaed  
  300.         Console.WriteLine("File : {0} Renamed to {1}", e.OldFullPath, e.FullPath)  
  301.         Copy_Delete_File.GetFileName(e.Name)  
  302.         System.Threading.Thread.Sleep(100)  
  303.         Copy_Delete_File.copyfile()  
  304.     End Sub  
  305. End Class  
  306.  
  307. #End Region  
  308.  
  309. #Region "Copy and Delete file class"  
  310. 'About Copy and Delete file  
  311. Public Class Copy_Delete_File  
  312.     'Parameter use for down below work  
  313.     Public Shared filename As String 'use get file name  
  314.     Public Shared sourcepath As String 'use get soure file path  
  315.     Public Shared copypath As String 'use get copy file path  
  316.     Public Shared uptonas As String 'use get upload to nas path  
  317.     Public Shared uptoftp As String 'use get upload to ftp path  
  318.     Public Shared checkbox As Boolean 'use get checkbox condition  
  319.   
  320.     'Get now file name  
  321.     Public Shared Sub GetFileName(Name As String)  
  322.         Console.WriteLine(Name & "  Get")  
  323.         filename = Name  
  324.   
  325.     End Sub  
  326.     'Get path to use copy file, delete file, upload file  
  327.     Public Shared Sub GetPath(source As String, copyformpath As String, upNASpath As String, upFTPpath As String, check As Boolean)  
  328.         Console.WriteLine(source & vbCr & copyformpath & vbCr & upNASpath & vbCr & upFTPpath)  
  329.         sourcepath = source  
  330.         copypath = copyformpath  
  331.         uptonas = upNASpath  
  332.         uptoftp = upFTPpath  
  333.         checkbox = check  
  334.     End Sub  
  335.     'Do copy file to remote folder, upload file to NAS folder and FTP folder then deleted local file  
  336.     Public Shared Sub copyfile()  
  337.         Try  
  338.             'Copy file to remote folder from local folder  
  339.             File.Copy(sourcepath + "\" + filename, copypath + "\" + filename, True)  
  340.   
  341.             'Control retry parameter  
  342.             Dim Retry As Boolean = True  
  343.             Dim retrytimes As Integer = 0  
  344.   
  345.             'Check upload to NAS or FTP  
  346.             If checkbox = False Then  
  347.                 While Retry  
  348.                     Try  
  349.                         'Upload to NAS, copy file from remote folder, upload done delete loacal file  
  350.                         File.Copy(copypath + "\" + filename, uptonas + "\" + filename, True)  
  351.                         System.Threading.Thread.Sleep(100)  
  352.                         Retry = False  
  353.                     Catch ex As Exception  
  354.                         'Upload to NAS Error, do retry upload file and count retry times  
  355.                         If retrytimes <= 10 Then  
  356.                             Retry = True  
  357.                             retrytimes += 1  
  358.                             'Console.WriteLine("Upload to NAS was Error, do retry upload, retry times : " & retrytimes)  
  359.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Upload to NAS was Error, do retry upload, retry times : " & retrytimes)  
  360.                             System.Threading.Thread.Sleep(500)  
  361.                         Else  
  362.                             Retry = False  
  363.                             retrytimes = 0  
  364.                             'Console.WriteLine("Retry upload to NAS times was arrived")  
  365.                             'When retry arrived then add upload error filename into list and error log list  
  366.                             ErrorList.AddNas(filename)  
  367.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Retry upload to NAS times was arrived")  
  368.                         End If  
  369.                     End Try  
  370.                 End While  
  371.                 File.Delete(sourcepath + "\" + filename)  
  372.             Else  
  373.                 While Retry  
  374.                     Try  
  375.                         'Upload to FTP, copy file from remote folder, upload done delete loacal file  
  376.                         File.Copy(copypath + "\" + filename, uptoftp + "\" + filename, True)  
  377.                         System.Threading.Thread.Sleep(100)  
  378.                         FTPupload.uploadtoftp()  
  379.                         System.Threading.Thread.Sleep(100)  
  380.                         Retry = False  
  381.                     Catch ex As Exception  
  382.                         'Upload to FTP Error, do retry upload file and count retry times  
  383.                         If retrytimes <= 10 Then  
  384.                             Retry = True  
  385.                             retrytimes += 1  
  386.                             'Console.WriteLine("Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  387.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Upload to FTP was Error, do retry upload, do retry upload, retry times : " & retrytimes)  
  388.                             System.Threading.Thread.Sleep(500)  
  389.                         Else  
  390.                             Retry = False  
  391.                             retrytimes = 0  
  392.                             'Console.WriteLine("Retry upload to FTP times was arrived")  
  393.                             'When retry arrived then add upload error filename into list and error log list  
  394.                             ErrorList.AddFtp(filename)  
  395.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Retry upload to FTP times was arrived")  
  396.                         End If  
  397.                     End Try  
  398.                 End While  
  399.                 File.Delete(sourcepath + "\" + filename)  
  400.             End If  
  401.   
  402.         Catch ex As Exception  
  403.             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Copy to reomte folder failure")  
  404.         End Try  
  405.     End Sub  
  406. End Class  
  407.  
  408. #End Region  
  409.  
  410. #Region "Upload to FTP class"  
  411. 'About upload to FTP  
  412. Public Class FTPupload  
  413.     'Parameter usw for down below work  
  414.     Public Shared FTP_IP As String 'use get IP  
  415.     Public Shared FTP_Account As String 'use get account  
  416.     Public Shared FTP_Password As String 'use get password  
  417.   
  418.     'Get FTP info, IP, account and password  
  419.     Public Shared Sub Get_FTPinfo(ByVal ip As StringByVal account As StringByVal password As String)  
  420.         FTP_IP = ip  
  421.         FTP_Account = account  
  422.         FTP_Password = password  
  423.     End Sub  
  424.   
  425.     'Do upload work  
  426.     Public Shared Sub uploadtoftp()  
  427.         Dim ftpRequestStream As System.IO.Stream  
  428.         Dim statusDescription As String  
  429.         Dim retry As Boolean = True  
  430.         Dim retrytimes As Integer = 0  
  431.         While retry  
  432.             'Create file  
  433.             Try  
  434.                 'Create FTP IP and upload file name  
  435.                 Dim ftpRequest As System.Net.FtpWebRequest = System.Net.FtpWebRequest.Create("ftp://" + FTP_IP + "//" + Copy_Delete_File.filename)  
  436.                 ftpRequest.Credentials = New System.Net.NetworkCredential(FTP_Account, FTP_Password) 'Set account and password  
  437.                 ftpRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 'Set method is uploadfile mathod  
  438.                 System.Threading.Thread.Sleep(500)  
  439.                 ftpRequest.KeepAlive = True  
  440.   
  441.                 ftpRequestStream = ftpRequest.GetRequestStream  
  442.                 retry = False  
  443.             Catch ex As Exception  
  444.                 If retrytimes <= 10 Then  
  445.                     'If retry times less than 10 do retry and add retry times, error loglist  
  446.                     statusDescription = ex.Message  
  447.                     retry = True  
  448.                     retrytimes += 1  
  449.                     'Console.WriteLine("***Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  450.                     ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "***Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  451.                     System.Threading.Thread.Sleep(500)  
  452.                 Else  
  453.   
  454.                     retry = False  
  455.                     retrytimes = 0  
  456.                     'Console.WriteLine("***Retry upload to FTP times was arrived")  
  457.                     'When retry arrived then add upload error filename into list and error log list  
  458.                     ErrorList.AddFtp(Copy_Delete_File.filename)  
  459.                     ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "***Retry upload to FTP times was arrived")  
  460.                 End If  
  461.   
  462.             End Try  
  463.         End While  
  464.   
  465.         'Open copy file and then read file data  
  466.         Dim filestream As System.IO.FileStream  
  467.         Try  
  468.             filestream = System.IO.File.Open(Copy_Delete_File.copypath + "\" + Copy_Delete_File.filename, IO.FileMode.Open, IO.FileAccess.Read)  
  469.             'filestream = System.IO.File.Open(Copy_Delete_File.sourcepath + "\" + Copy_Delete_File.filename, IO.FileMode.Open, IO.FileAccess.Read)  
  470.         Catch ex As Exception  
  471.             statusDescription = ex.Message  
  472.         End Try  
  473.   
  474.         Dim buffer() As Byte = New Byte((filestream.Length) - 1) {}  
  475.         Dim byteRead As Integer  
  476.         'Do write data into FTP file  
  477.         While True  
  478.             byteRead = filestream.Read(buffer, 0, buffer.Length)  
  479.             If byteRead = 0 Then Exit While  
  480.             ftpRequestStream.Write(buffer, 0, byteRead)  
  481.         End While  
  482.   
  483.         filestream.Close()  
  484.         ftpRequestStream.Close()  
  485.   
  486.     End Sub  
  487. End Class  
  488.  
  489. #End Region  
  490.  
  491. #Region "Error List"  
  492. 'About error list, NAS , FTP, log  
  493. Public Class ErrorList  
  494.     Public Shared NASList As New List(Of String)  
  495.     Public Shared FTPList As New List(Of String)  
  496.     Public Shared LogList As New List(Of String)  
  497.   
  498.     Public Shared Sub AddNas(ByVal nList As String)  
  499.         NASList.Add(nList)  
  500.   
  501.     End Sub  
  502.     Public Shared Sub AddFtp(ByVal fList As String)  
  503.         FTPList.Add(fList)  
  504.   
  505.     End Sub  
  506.     Public Shared Sub AddLog(ByVal log As String)  
  507.         LogList.Add(log)  
  508.   
  509.     End Sub  
  510.     Public Shared Sub ClearNas()  
  511.         NASList.Clear()  
  512.   
  513.     End Sub  
  514.     Public Shared Sub ClearFtp()  
  515.         FTPList.Clear()  
  516.   
  517.     End Sub  
  518.     Public Shared Sub ClaerLog()  
  519.         LogList.Clear()  
  520.   
  521.     End Sub  
  522.     Public Shared Function CountNas()  
  523.         Return NASList.Count  
  524.   
  525.     End Function  
  526.     Public Shared Function CountFtp()  
  527.         Return FTPList.Count  
  528.   
  529.     End Function  
  530.     Public Shared Sub RemoveNAS(ByVal i As Integer)  
  531.         Dim str As String = NASList(i)  
  532.         NASList.Remove(str)  
  533.     End Sub  
  534.     Public Shared Sub RemoveFTP(ByVal i As Integer)  
  535.         Dim str As String = FTPList(i)  
  536.         FTPList.Remove(str)  
  537.     End Sub  
  538. End Class  
  539.  
  540. #End Region  
  541.   
  542. Public Class Backwork  
  543.     'Public WithEvents background As New System.ComponentModel.BackgroundWorker  
  544.     Public Shared background As New System.ComponentModel.BackgroundWorker  
  545.   
  546.     Public Sub New()  
  547.         background.WorkerReportsProgress = True  
  548.         background.WorkerSupportsCancellation = True  
  549.   
  550.         background.RunWorkerAsync()  
  551.   
  552.     End Sub  
  553.   
  554.     Public Shared Sub main()  
  555.         background.RunWorkerAsync()  
  556.         AddHandler background.DoWork, AddressOf back_DoWork  
  557.     End Sub  
  558.   
  559.     Private Shared Sub back_DoWork(ByVal sender As ObjectByVal e As System.ComponentModel.DoWorkEventArgs)  
  560.         Dim retry As Boolean = True  
  561.         Dim retrytime As Integer = 0  
  562.         'Check upload NAS ro FTP  
  563.         If Copy_Delete_File.checkbox = False Then  
  564.             While retry  
  565.                 'Do upload to NAS back ground work  
  566.                 For i As Integer = 0 To ErrorList.CountNas - 1  
  567.                     Try  
  568.                         File.Copy(Copy_Delete_File.copypath + "\" + ErrorList.NASList(i), Copy_Delete_File.uptonas + "\" + ErrorList.NASList(i), True)  
  569.                         If ErrorList.CountNas = 0 Then  
  570.                             'If NasList count eaual 0, retry end  
  571.                             retry = False  
  572.                         Else  
  573.                             'retry not end and remove NasList now data then re do for  
  574.                             retry = True  
  575.                             ErrorList.RemoveNAS(i)  
  576.                             Exit For  
  577.                         End If  
  578.                     Catch ex As Exception  
  579.                         'Retry failure add retry times and error log  
  580.                         retry = True  
  581.                         retrytime += 1  
  582.                         'Console.WriteLine("Error list upload to NAS retry failured, back do work times : " & retrytime)  
  583.                         ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Error list upload to NAS retry failured, back do work times : " & retrytime)  
  584.                     End Try  
  585.                 Next  
  586.                 'If NasList count eaual 0, retry end  
  587.                 If ErrorList.CountNas = 0 Then  
  588.                     retry = False  
  589.                 End If  
  590.             End While  
  591.   
  592.         Else  
  593.   
  594.             While retry  
  595.                 For i As Integer = 0 To ErrorList.CountFtp - 1  
  596.                     Try  
  597.                         File.Copy(Copy_Delete_File.copypath + "\" + ErrorList.FTPList(i), Copy_Delete_File.uptoftp + "\" + ErrorList.FTPList(i), True)  
  598.                         System.Threading.Thread.Sleep(100)  
  599.                         FTPupload.uploadtoftp()  
  600.                         System.Threading.Thread.Sleep(100)  
  601.                         If ErrorList.CountFtp = 0 Then  
  602.                             'If NasList count eaual 0, retry end  
  603.                             retry = False  
  604.                         Else  
  605.                             'retry not end and remove NasList now data then re do for  
  606.                             retry = True  
  607.                             ErrorList.RemoveFTP(i)  
  608.                             Exit For  
  609.                         End If  
  610.                     Catch ex As Exception  
  611.                         'Retry failure add retry times and error log  
  612.                         retry = True  
  613.                         retrytime += 1  
  614.                         'Console.WriteLine("Error list upload to FTP retry failured, back do work times : " & retrytime)  
  615.                         ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Error list upload to FTP retry failured, back do work times : " & retrytime)  
  616.                     End Try  
  617.                 Next  
  618.                 'If NasList count eaual 0, retry end  
  619.                 If ErrorList.CountFtp = 0 Then  
  620.                     retry = False  
  621.                 End If  
  622.             End While  
  623.   
  624.         End If  
  625.     End Sub  
  626.   
  627. End Class



----------------------------------------------------------------------------------------------------------------------

分享就真的到這邊告一段落了!!!!
完結篇!!!!沒有下集了~

謝謝大家收看,謝謝先進的教學文章!!!

沒有留言:

張貼留言