Powered By Blogger

關於我自己

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

2016年7月30日 星期六

【VB.NET 語言】上報 練習 _ 上傳錯誤紀錄

小程式來到第六集囉!!!!!(前情提要)
這次居裡貓要把所有上傳失敗的資訊做個紀錄!
以便另一次的重新上傳使用~所以這集跟下集算是關係良好的....嗯!
第六集講講當我們之前寫得重新上傳機制依然沒有辦法上傳成功該怎麼辦呢!

大家應該都有發現居裡貓在程式上傳的地方都有重新上傳機制,
而且設定都只有10次,當然啦,就程式而以一下就滿足條件了~
那這一點點時間內還是沒辦法重新上傳成功該怎麼辦!?
總不能放著就不上傳吧~

那我們要再次重新上傳又不能影響到新的檔案寫入時的上傳~
首先我們要有個東西可以記錄我的上傳失敗的資訊,
再來才使想想怎麼把這些資訊再次上傳!

所以這次居裡貓就使用了 List 的方法來把上傳失敗的資訊記錄起來~
以便之後我們再次上傳使用~~~

好囉!那就看看程式碼吧~


-----------------------------------------------------------------------------------------------------------------------
  1. '這次反向操作,先上大家看一下存上傳失敗資訊的 List 的 Class 建立起來長什麼鳥樣子  
  2. '這裡先提醒大家,大家會看到三個 List 的名字,那也是分別他們的功能  
  3. '現在我們提到的都是上傳失敗的問題,所以是 NAS and FTP  
  4. '至於 Log 那是之後會說明的部分,大家也可以先看~  
  5.   
  6. 'About error list, NAS , FTP, log  
  7. Public Class ErrorList  
  8.     Public Shared NASList As New List(Of String)  
  9.     Public Shared FTPList As New List(Of String)  
  10.     Public Shared LogList As New List(Of String)  
  11.   
  12.     Public Shared Sub AddNas(ByVal nList As String)  
  13.         NASList.Add(nList)  
  14.   
  15.     End Sub  
  16.     Public Shared Sub AddFtp(ByVal fList As String)  
  17.         FTPList.Add(fList)  
  18.   
  19.     End Sub  
  20.     Public Shared Sub AddLog(ByVal log As String)  
  21.         LogList.Add(log)  
  22.   
  23.     End Sub  
  24.     Public Shared Sub ClearNas()  
  25.         NASList.Clear()  
  26.   
  27.     End Sub  
  28.     Public Shared Sub ClearFtp()  
  29.         FTPList.Clear()  
  30.   
  31.     End Sub  
  32.     Public Shared Sub ClaerLog()  
  33.         LogList.Clear()  
  34.   
  35.     End Sub  
  36.     Public Shared Function CountNas()  
  37.         Return NASList.Count  
  38.   
  39.     End Function  
  40.     Public Shared Function CountFtp()  
  41.         Return FTPList.Count  
  42.   
  43.     End Function  
  44.     Public Shared Sub RemoveNAS(ByVal i As Integer)  
  45.         Dim str As String = NASList(i)  
  46.         NASList.Remove(str)  
  47.     End Sub  
  48.     Public Shared Sub RemoveFTP(ByVal i As Integer)  
  49.         Dim str As String = FTPList(i)  
  50.         FTPList.Remove(str)  
  51.     End Sub  
  52. End Class  
  53.   
  54. '------分割線,下面是在複製檔案時使用到紀錄上傳失敗的部分  
  55.   
  56. 'About Copy and Delete file  
  57. Public Class Copy_Delete_File  
  58.     'Parameter use for down below work  
  59.     Public Shared filename As String 'use get file name  
  60.     Public Shared sourcepath As String 'use get soure file path  
  61.     Public Shared copypath As String 'use get copy file path  
  62.     Public Shared uptonas As String 'use get upload to nas path  
  63.     Public Shared uptoftp As String 'use get upload to ftp path  
  64.     Public Shared checkbox As Boolean 'use get checkbox condition  
  65.   
  66.     'Get now file name  
  67.     Public Shared Sub GetFileName(Name As String)  
  68.         Console.WriteLine(Name & "  Get")  
  69.         filename = Name  
  70.   
  71.     End Sub  
  72.     'Get path to use copy file, delete file, upload file  
  73.     Public Shared Sub GetPath(source As String, copyformpath As String, upNASpath As String, upFTPpath As String, check As Boolean)  
  74.         Console.WriteLine(source & vbCr & copyformpath & vbCr & upNASpath & vbCr & upFTPpath)  
  75.         sourcepath = source  
  76.         copypath = copyformpath  
  77.         uptonas = upNASpath  
  78.         uptoftp = upFTPpath  
  79.         checkbox = check  
  80.     End Sub  
  81.     'Do copy file to remote folder, upload file to NAS folder and FTP folder then deleted local file  
  82.     Public Shared Sub copyfile()  
  83.         Try  
  84.             'Copy file to remote folder from local folder  
  85.             File.Copy(sourcepath + "\" + filename, copypath + "\" + filename, True)  
  86.   
  87.             'Control retry parameter  
  88.             Dim Retry As Boolean = True  
  89.             Dim retrytimes As Integer = 0  
  90.   
  91.             'Check upload to NAS or FTP  
  92.             If checkbox = False Then  
  93.                 While Retry  
  94.                     Try  
  95.                         'Upload to NAS, copy file from remote folder, upload done delete loacal file  
  96.                         File.Copy(copypath + "\" + filename, uptonas + "\" + filename, True)  
  97.                         System.Threading.Thread.Sleep(100)  
  98.                         Retry = False  
  99.                     Catch ex As Exception  
  100.                         'Upload to NAS Error, do retry upload file and count retry times  
  101.                         If retrytimes <= 10 Then  
  102.                             Retry = True  
  103.                             retrytimes += 1  
  104.                             'Console.WriteLine("Upload to NAS was Error, do retry upload, retry times : " & retrytimes)  
  105.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Upload to NAS was Error, do retry upload, retry times : " & retrytimes)  
  106.                             System.Threading.Thread.Sleep(500)  
  107.                         Else  
  108.                             Retry = False  
  109.                             retrytimes = 0  
  110.                             'Console.WriteLine("Retry upload to NAS times was arrived")  
  111.                             'When retry arrived then add upload error filename into list and error log list  
  112.   
  113. '這邊記錄囉!!!!  
  114.   
  115.                             ErrorList.AddNas(filename)  
  116.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Retry upload to NAS times was arrived")  
  117.                         End If  
  118.                     End Try  
  119.                 End While  
  120.                 File.Delete(sourcepath + "\" + filename)  
  121.             Else  
  122.                 While Retry  
  123.                     Try  
  124.                         'Upload to FTP, copy file from remote folder, upload done delete loacal file  
  125.                         File.Copy(copypath + "\" + filename, uptoftp + "\" + filename, True)  
  126.                         System.Threading.Thread.Sleep(100)  
  127.                         FTPupload.uploadtoftp()  
  128.                         System.Threading.Thread.Sleep(100)  
  129.                         Retry = False  
  130.                     Catch ex As Exception  
  131.                         'Upload to FTP Error, do retry upload file and count retry times  
  132.                         If retrytimes <= 10 Then  
  133.                             Retry = True  
  134.                             retrytimes += 1  
  135.                             'Console.WriteLine("Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  136.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Upload to FTP was Error, do retry upload, do retry upload, retry times : " & retrytimes)  
  137.                             System.Threading.Thread.Sleep(500)  
  138.                         Else  
  139.                             Retry = False  
  140.                             retrytimes = 0  
  141.                             'Console.WriteLine("Retry upload to FTP times was arrived")  
  142.                             'When retry arrived then add upload error filename into list and error log list  
  143.   
  144. '這邊記錄囉!!!!  
  145.   
  146.                             ErrorList.AddFtp(filename)  
  147.                             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Retry upload to FTP times was arrived")  
  148.                         End If  
  149.                     End Try  
  150.                 End While  
  151.                 File.Delete(sourcepath + "\" + filename)  
  152.             End If  
  153.   
  154.         Catch ex As Exception  
  155.             ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Copy to reomte folder failure")  
  156.         End Try  
  157.     End Sub  
  158. End Class  
  159.   
  160. '這邊就是在對 FTP Server 上傳失敗的紀錄  
  161.   
  162. 'About upload to FTP  
  163. Public Class FTPupload  
  164.     'Parameter usw for down below work  
  165.     Public Shared FTP_IP As String 'use get IP  
  166.     Public Shared FTP_Account As String 'use get account  
  167.     Public Shared FTP_Password As String 'use get password  
  168.   
  169.     'Get FTP info, IP, account and password  
  170.     Public Shared Sub Get_FTPinfo(ByVal ip As StringByVal account As StringByVal password As String)  
  171.         FTP_IP = ip  
  172.         FTP_Account = account  
  173.         FTP_Password = password  
  174.     End Sub  
  175.   
  176.     'Do upload work  
  177.     Public Shared Sub uploadtoftp()  
  178.         Dim ftpRequestStream As System.IO.Stream  
  179.         Dim statusDescription As String  
  180.         Dim retry As Boolean = True  
  181.         Dim retrytimes As Integer = 0  
  182.         While retry  
  183.             'Create file  
  184.             Try  
  185.                 'Create FTP IP and upload file name  
  186.                 Dim ftpRequest As System.Net.FtpWebRequest = System.Net.FtpWebRequest.Create("ftp://" + FTP_IP + "//" + Copy_Delete_File.filename)  
  187.                 ftpRequest.Credentials = New System.Net.NetworkCredential(FTP_Account, FTP_Password) 'Set account and password  
  188.                 ftpRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 'Set method is uploadfile mathod  
  189.                 System.Threading.Thread.Sleep(500)  
  190.                 ftpRequest.KeepAlive = True  
  191.   
  192.                 ftpRequestStream = ftpRequest.GetRequestStream  
  193.                 retry = False  
  194.             Catch ex As Exception  
  195.                 If retrytimes <= 10 Then  
  196.                     'If retry times less than 10 do retry and add retry times, error loglist  
  197.                     statusDescription = ex.Message  
  198.                     retry = True  
  199.                     retrytimes += 1  
  200.                     'Console.WriteLine("***Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  201.                     ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "***Upload to FTP was Error, do retry upload, retry times : " & retrytimes)  
  202.                     System.Threading.Thread.Sleep(500)  
  203.                 Else  
  204.   
  205.                     retry = False  
  206.                     retrytimes = 0  
  207.                     'Console.WriteLine("***Retry upload to FTP times was arrived")  
  208.                     'When retry arrived then add upload error filename into list and error log list  
  209.   
  210. '這邊記錄囉!!!!  
  211.   
  212.                     ErrorList.AddFtp(Copy_Delete_File.filename)  
  213.                     ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "***Retry upload to FTP times was arrived")  
  214.                 End If  
  215.   
  216.             End Try  
  217.         End While  
  218.   
  219.         'Open copy file and then read file data  
  220.         Dim filestream As System.IO.FileStream  
  221.         Try  
  222.             filestream = System.IO.File.Open(Copy_Delete_File.copypath + "\" + Copy_Delete_File.filename, IO.FileMode.Open, IO.FileAccess.Read)  
  223.             'filestream = System.IO.File.Open(Copy_Delete_File.sourcepath + "\" + Copy_Delete_File.filename, IO.FileMode.Open, IO.FileAccess.Read)  
  224.         Catch ex As Exception  
  225.             statusDescription = ex.Message  
  226.         End Try  
  227.   
  228.         Dim buffer() As Byte = New Byte((filestream.Length) - 1) {}  
  229.         Dim byteRead As Integer  
  230.         'Do write data into FTP file  
  231.         While True  
  232.             byteRead = filestream.Read(buffer, 0, buffer.Length)  
  233.             If byteRead = 0 Then Exit While  
  234.             ftpRequestStream.Write(buffer, 0, byteRead)  
  235.         End While  
  236.   
  237.         filestream.Close()  
  238.         ftpRequestStream.Close()  
  239.   
  240.     End Sub

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

今天的分享就是個紀錄一些資訊,之後我們要利用這個資訊來做其他的重新上傳。
仔細看下來記錄這些資訊的地方就是當我們上傳失敗的時候嘛!
這個是很直覺的~~

如何利用這些資訊,再次的重新上傳方法請待下集。
感謝各位收看,感謝各位先進的教學文。


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

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

沒有留言:

張貼留言