Powered By Blogger

關於我自己

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

2016年7月30日 星期六

【VB.NET 語言】上報 練習 _ 複製檔案

小程式來到第四集,不知道的請看(前情提要)
居裡貓今天講講第四集要做什麼!
就是當我們監控完資料夾之後,一旦資料夾出現了檔案那我們該做什麼!!!?
那該做什麼我們也來回顧一下前情提要,就可以明白的一二了!
當然是要把檔案複製到其他路徑去啊!!!

好!第四集就是複製檔案到其他的路徑~~

開始程式碼吧!
等等!!!!!!!!!!!!!!!
我還是先說說流程大概是什麼吧!
首先是,我們在監控的資料夾出現了一個檔案,
因為出現的這個檔案,所以必須把它複製到其他路徑,
包含 Remote Folder 、NAS Folder 或者是 FTP Folder,
這裡提醒各位一下,居裡貓這邊有做一個 CheckBox ,
居裡貓用它來判斷我們今天是要上傳到FTP還是NAS,所以這個部分要稍微注意一下才好。

正式開始!上程式碼~

-------------------------------------------------------------------------------------------------------------------------
  1. '這裡大家會好奇怎麼又出現 "Write XML" 按鈕了  
  2. '因為居裡貓利用這個按鈕來取得表單上的資訊,包含 CheckBox 的資訊  
  3.   
  4. 'Button Contorl XML Write  
  5.     Private Sub Btn_WriteXML_Click(sender As Object, e As EventArgs) Handles Btn_WriteXML.Click  
  6.         'Check watch event was raising  
  7.         If Watcher.watcher.EnableRaisingEvents = False Then  
  8.             Watcher.watcher.EnableRaisingEvents = True  
  9.         End If  
  10.   
  11. '在下面這一行取得表單資訊_______________  
  12.   
  13.         Copy_Delete_File.GetPath(TxB_Local.Text, TxB_Remote.Text, TxB_NAS.Text, TxB_FTP.Text, ChB_UploadFTP.Checked)  
  14.   
  15.         FTPupload.Get_FTPinfo(TxB_FTPAddress.Text, TxB_FTPAccount.Text, Txb_FTPPassword.Text)  
  16.   
  17.         Dim wrXML As New XML  
  18.         wrXML.LocalPath = TxB_Local.Text  
  19.         wrXML.RemotePath = TxB_Remote.Text  
  20.         wrXML.NASPath = TxB_NAS.Text  
  21.         wrXML.FTPPath = TxB_FTP.Text  
  22.         wrXML.Data = "This is a Programming Practices " & Now.ToString  
  23.         wrXML.DateTime = Now.ToString  
  24.         If ChB_UploadFTP.Checked Then  
  25.             wrXML.CheckFTP = "Ture"  
  26.         Else  
  27.             wrXML.CheckFTP = "Flase"  
  28.         End If  
  29.   
  30.         Dim objectStreamWriter As New StreamWriter(TxB_Local.Text + ("\Program Practices " & Now.ToString("_yyyyMMddHHmmss") & ".xml"))  
  31.         Dim xmlserialize As New XmlSerializer(wrXML.GetType)  
  32.         xmlserialize.Serialize(objectStreamWriter, wrXML)  
  33.         objectStreamWriter.Dispose()  
  34.   
  35.         'Check backwork status  
  36.         'If Not back.IsBusy = True Then  
  37.         '    back.RunWorkerAsync()  
  38.         'End If  
  39.         Backwork.main()  
  40.   
  41.     End Sub  
  42.   
  43. '---分割線,上面用來取得表單資訊,下面則是啟動複製檔案的工作  
  44.   
  45. 'About Monitor Foldaer  
  46. Public Class Watcher  
  47.   
  48.     Public Shared Sub Main(path As String)  
  49.         '"path" was monitored folder file path  
  50.         Run(path)  
  51.   
  52.     End Sub  
  53.     Public Shared watcher As New FileSystemWatcher()  
  54.     Private Shared Sub Run(p As String)  
  55.         'Create new FileSystemWatcher and set path  
  56.         watcher.Path = p  
  57.         'Only watch XML files  
  58.         watcher.Filter = "*.xml"  
  59.   
  60.         'AddHandler watcher.Changed, AddressOf OnChanged  
  61.   
  62. '這邊居裡貓把間控制資料產生檔案的事件工作委派給別人_____  
  63.   
  64.         AddHandler watcher.Created, AddressOf OnCreated  
  65.         'AddHandler watcher.Deleted, AddressOf OnDeleted  
  66.         'AddHandler watcher.Renamed, AddressOf OnRenamed  
  67.   
  68.         'Begin watching  
  69.         watcher.EnableRaisingEvents = True  
  70.   
  71.     End Sub  
  72.     Private Shared Sub OnCreated(source As Object, e As FileSystemEventArgs)  
  73.   
  74. '委派的工作內容就是取得現在產生的這個檔案的黨名  
  75. '還有啟動檔案複製的工作囉!  
  76.   
  77.         'When file was created  
  78.         Console.WriteLine("File : " & e.FullPath & " _ " & e.ChangeType)  
  79.         'When into here and then get now file name  
  80.         Copy_Delete_File.GetFileName(e.Name)  
  81.         System.Threading.Thread.Sleep(500)  
  82.         'Wait few second then do copyfile work  
  83.         Copy_Delete_File.copyfile()  
  84.     End Sub  
  85.     Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)  
  86.         'When file was changed  
  87.     End Sub  
  88.     Private Shared Sub OnDeleted(source As Object, e As FileSystemEventArgs)  
  89.         'When file was deleted  
  90.     End Sub  
  91.     Private Shared Sub OnRenamed(source As Object, e As RenamedEventArgs)  
  92.         'When file was renmaed  
  93.         Console.WriteLine("File : {0} Renamed to {1}", e.OldFullPath, e.FullPath)  
  94.         Copy_Delete_File.GetFileName(e.Name)  
  95.         System.Threading.Thread.Sleep(100)  
  96.         Copy_Delete_File.copyfile()  
  97.     End Sub  
  98. End Class  
  99.   
  100. '-----分割線,下面才是複製檔案的 Class 部分  
  101.   
  102. 'About Copy and Delete file  
  103. Public Class Copy_Delete_File  
  104.     'Parameter use for down below work  
  105.     Public Shared filename As String 'use get file name  
  106.     Public Shared sourcepath As String 'use get soure file path  
  107.     Public Shared copypath As String 'use get copy file path  
  108.     Public Shared uptonas As String 'use get upload to nas path  
  109.     Public Shared uptoftp As String 'use get upload to ftp path  
  110.     Public Shared checkbox As Boolean 'use get checkbox condition  
  111.   
  112. '居裡貓這邊寫了兩個程式是專門用來取得需要的資訊  
  113.   
  114.     'Get now file name  
  115.     Public Shared Sub GetFileName(Name As String)  
  116.         Console.WriteLine(Name & "  Get")  
  117.         filename = Name  
  118.   
  119.     End Sub  
  120.     'Get path to use copy file, delete file, upload file  
  121.     Public Shared Sub GetPath(source As String, copyformpath As String, upNASpath As String, upFTPpath As String, check As Boolean)  
  122.         Console.WriteLine(source & vbCr & copyformpath & vbCr & upNASpath & vbCr & upFTPpath)  
  123.         sourcepath = source  
  124.         copypath = copyformpath  
  125.         uptonas = upNASpath  
  126.         uptoftp = upFTPpath  
  127.         checkbox = check  
  128.     End Sub  
  129.   
  130. '這裡才是真正開始複製檔案  
  131.   
  132.     'Do copy file to remote folder, upload file to NAS folder and FTP folder then deleted local file  
  133.     Public Shared Sub copyfile()  
  134.         Try  
  135.   
  136. '這邊先把檔案複製到 Remote Folder 做備份  
  137.   
  138.             'Copy file to remote folder from local folder  
  139.             File.Copy(sourcepath + "\" + filename, copypath + "\" + filename, True)  
  140.   
  141.             'Control retry parameter  
  142.             Dim Retry As Boolean = True  
  143.             Dim retrytimes As Integer = 0  
  144.   
  145. '這裡要先確認今天勾選的是上傳到 NAS 還是 FTP  
  146.   
  147.             'Check upload to NAS or FTP  
  148.             If checkbox = False Then  
  149.                 While Retry  
  150.   
  151. '防止上傳有一些問題,做了一個重新上傳的感覺  
  152. '上傳的檔案是備份的資料夾取得的  
  153.   
  154.                     Try  
  155.                         'Upload to NAS, copy file from remote folder, upload done delete loacal file  
  156.                         File.Copy(copypath + "\" + filename, uptonas + "\" + filename, True)  
  157.                         System.Threading.Thread.Sleep(100)  
  158.                         Retry = False  
  159.                     Catch ex As Exception  
  160.                         'Upload to NAS Error, do retry upload file and count retry times  
  161.                         If retrytimes <= 10 Then  
  162.                             Retry = True  
  163.                             retrytimes += 1  
  164.                             'Console.WriteLine("Upload to NAS was Error, do retry upload, retry times : " & retrytimes)  
  165.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Upload to NAS was Error, do retry upload, retry times : " & retrytimes)  
  166.                             System.Threading.Thread.Sleep(500)  
  167.                         Else  
  168.                             Retry = False  
  169.                             retrytimes = 0  
  170.                             'Console.WriteLine("Retry upload to NAS times was arrived")  
  171.                             'When retry arrived then add upload error filename into list and error log list  
  172.                             ErrorList.AddNas(filename)  
  173.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Retry upload to NAS times was arrived")  
  174.                         End If  
  175.                     End Try  
  176.                 End While  
  177.                 File.Delete(sourcepath + "\" + filename)  
  178.   
  179. '下面是上傳到 FTP 的部分  
  180. '一樣做了重新上傳的機制  
  181.   
  182.             Else  
  183.                 While Retry  
  184.                     Try  
  185.                         'Upload to FTP, copy file from remote folder, upload done delete loacal file  
  186.                         File.Copy(copypath + "\" + filename, uptoftp + "\" + filename, True)  
  187.                         System.Threading.Thread.Sleep(100)  
  188.                         FTPupload.uploadtoftp()  
  189.                         System.Threading.Thread.Sleep(100)  
  190.                         Retry = False  
  191.                     Catch ex As Exception  
  192.                         'Upload to FTP Error, do retry upload file and count retry times  
  193.                         If retrytimes <= 10 Then  
  194.                             Retry = True  
  195.                             retrytimes += 1  
  196.                             'Console.WriteLine("Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  197.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Upload to FTP was Error, do retry upload, do retry upload, retry times : " & retrytimes)  
  198.                             System.Threading.Thread.Sleep(500)  
  199.                         Else  
  200.                             Retry = False  
  201.                             retrytimes = 0  
  202.                             'Console.WriteLine("Retry upload to FTP times was arrived")  
  203.                             'When retry arrived then add upload error filename into list and error log list  
  204.                             ErrorList.AddFtp(filename)  
  205.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Retry upload to FTP times was arrived")  
  206.                         End If  
  207.                     End Try  
  208.                 End While  
  209.                 File.Delete(sourcepath + "\" + filename)  
  210.             End If  
  211.   
  212.         Catch ex As Exception  
  213.             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Copy to reomte folder failure")  
  214.         End Try  
  215.     End Sub  
  216. End Class  
  217. '在每次嘗試重新上傳的 While 結束之後就會刪除原始檔案(來自 Local Folder的檔案)

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

今天分享的內容就是當我監控程式監控到有檔案產生,
那我就要把這個被監控的資料夾產生的檔案備份出來,並且上傳,
當執行備份的時候當然是要先把來源檔案先備份到備份資料夾裡面,
接這這裡的順序我是利用備份資料夾的檔案來做上傳,
上傳也要檢查今天要上傳的方法是哪裡,
再去針對選擇的地方做上傳資料,為了確保上傳資料會成功,
所以加入一些重新上傳的防護措施,結束之後就把來源檔案刪除~

感謝各位的收看!後續我們下集再見了!!!
也感謝各位先進的教學文章!


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

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

沒有留言:

張貼留言