Brak opisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FILE-RECORDER.vb 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. Imports System.IO
  2. Imports System.Net.WebRequestMethods
  3. Imports System.Text
  4. Imports System.Windows.Forms.VisualStyles.VisualStyleElement
  5. Public Class Form1
  6. Dim 刪除數, XX1, XX2, XX3, XX4 As Integer
  7. Dim Str As String = Application.StartupPath
  8. Dim 驗證1, 驗證2 As String : Dim 取變數 As String
  9. Dim DDF As Boolean
  10. Dim 總數, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13 As Integer
  11. Private Sub 讀取料夾路徑_bt_MouseEnter(sender As Object, e As EventArgs) Handles 讀取料夾路徑_bt.MouseEnter
  12. ToolTip1.SetToolTip(Me.讀取料夾路徑_bt, "讀取資料夾內部所有文件")
  13. End Sub
  14. Private Sub 比對_bt_MouseEnter(sender As Object, e As EventArgs) Handles 比對_bt.MouseEnter
  15. ToolTip1.SetToolTip(Me.比對_bt, "檔案比對並將新增檔案加入清單")
  16. End Sub
  17. Private Sub 存檔_bt_MouseEnter(sender As Object, e As EventArgs) Handles 存檔_bt.MouseEnter
  18. ToolTip1.SetToolTip(Me.存檔_bt, "存檔")
  19. End Sub
  20. Private Sub 清除資料_dgv_MouseEnter(sender As Object, e As EventArgs) Handles 清除資料_dgv.MouseEnter
  21. ToolTip1.SetToolTip(Me.清除資料_dgv, "清除檔案資料")
  22. End Sub
  23. Private Sub 刪除重複_bt_MouseEnter(sender As Object, e As EventArgs) Handles 刪除重複_bt.MouseEnter
  24. ToolTip1.SetToolTip(Me.刪除重複_bt, "刪除被比對的資料夾內重複的資料 (請小心使用)!!")
  25. End Sub
  26. Private Sub 查詢_bt_MouseEnter(sender As Object, e As EventArgs) Handles 查詢_bt.MouseEnter
  27. ToolTip1.SetToolTip(Me.查詢_bt, "從檔案清單中查詢檔名查詢")
  28. End Sub
  29. Private Sub 重新讀取_bt_MouseEnter(sender As Object, e As EventArgs) Handles 重新讀取_bt.MouseEnter
  30. ToolTip1.SetToolTip(Me.重新讀取_bt, "開啟舊檔")
  31. End Sub
  32. Private Sub 檔名_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 檔名_ch.Click
  33. 檔名_ch.Checked = True : 路徑_ch.Checked = False
  34. End Sub
  35. Private Sub 路徑_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 路徑_ch.Click
  36. 檔名_ch.Checked = False : 路徑_ch.Checked = True
  37. End Sub
  38. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  39. ToolTip1.ToolTipTitle = "功能說明"
  40. 分流運算.Enabled = True
  41. End Sub
  42. Private Sub Form1_Closing(sender As Object, e As EventArgs) Handles MyBase.Closing
  43. If DDF = True Then
  44. Dim aa1 As MsgBoxResult = MsgBox("有比對動作還沒有執行存檔,是否執行?", MsgBoxStyle.OkCancel)
  45. If aa1 = MsgBoxResult.Ok Then : 存檔() : End If
  46. End If
  47. If IO.File.Exists(Str & "\RECORDER.csv") Then : IO.File.Delete(Str & "\RECORDER.csv") : End If
  48. End Sub
  49. Private Sub 分流運算_Tick(sender As Object, e As EventArgs) Handles 分流運算.Tick
  50. 分流運算.Enabled = False
  51. 選取清單_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6)
  52. 選取清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  53. 選取清單_dgv.ColumnHeadersHeight = 25 : 選取清單_dgv.AllowUserToAddRows = False
  54. 選取清單_dgv.RowTemplate.Height = 20 : 選取清單_dgv.Columns(0).FillWeight = 30
  55. 選取清單_dgv.Columns(0).ReadOnly = True
  56. 名稱資料_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6)
  57. 名稱資料_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  58. 名稱資料_dgv.ColumnHeadersHeight = 25 : 名稱資料_dgv.AllowUserToAddRows = False
  59. 名稱資料_dgv.RowTemplate.Height = 20 : 名稱資料_dgv.Columns(0).FillWeight = 30
  60. 名稱資料_dgv.Columns(0).ReadOnly = True
  61. 重複文件_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6)
  62. 重複文件_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  63. 重複文件_dgv.ColumnHeadersHeight = 25 : 重複文件_dgv.AllowUserToAddRows = False
  64. 重複文件_dgv.RowTemplate.Height = 20 : 重複文件_dgv.Columns(0).FillWeight = 30
  65. 重複文件_dgv.Columns(0).ReadOnly = True
  66. DDF = False
  67. XX1 = 0 : 數量_lb.Text = "共 " & XX1 & " 個檔案" : XX2 = 0 : 數量1_lb.Text = "共 " & XX2 & " 個檔案"
  68. XX3 = 0 : 數量2_lb.Text = "重複文件共 " & XX3 & " 個檔案" : XX4 = 0 : 數量4_lb.Text = "新增 " & XX4 & " 個檔案"
  69. 讀取資料()
  70. End Sub
  71. Private Sub 讀取資料()
  72. OpenFileDialog1.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*"
  73. OpenFileDialog1.FilterIndex = 1
  74. OpenFileDialog1.Multiselect = False
  75. If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
  76. Dim csvFilePath As String = OpenFileDialog1.FileName
  77. If IO.File.Exists(csvFilePath) Then
  78. Dim filePath As String = csvFilePath
  79. ' 設定要使用的編碼方式,以避免讀取時亂碼
  80. Dim encoding As Encoding = Encoding.UTF8
  81. ' 開啟檔案準備讀取資料
  82. Using reader As New StreamReader(filePath, encoding)
  83. ' 逐行讀取檔案並新增至 DataGridView 中
  84. Dim line As String
  85. While Not reader.EndOfStream
  86. line = reader.ReadLine()
  87. Dim values As String() = line.Split(",")
  88. 名稱資料_dgv.Rows.Add(values)
  89. End While
  90. End Using
  91. Else : End If
  92. For I As Integer = 0 To 名稱資料_dgv.Rows.Count - 1 : XX2 += 1 : Next : 數量1_lb.Text = "共 " & XX2 & " 個檔案"
  93. Else
  94. If IO.File.Exists(Str & "\RECORDER.csv") Then : IO.File.Delete(Str & "\RECORDER.csv") : End If
  95. If IO.File.Exists(Str & "\RECORDER.csv") Then
  96. Dim filePath As String = Str & "\RECORDER.csv"
  97. ' 設定要使用的編碼方式,以避免讀取時亂碼
  98. Dim encoding As Encoding = Encoding.UTF8
  99. ' 開啟檔案準備讀取資料
  100. Using reader As New StreamReader(filePath, encoding)
  101. ' 逐行讀取檔案並新增至 DataGridView 中
  102. Dim line As String
  103. While Not reader.EndOfStream
  104. line = reader.ReadLine()
  105. Dim values As String() = line.Split(",")
  106. 名稱資料_dgv.Rows.Add(values)
  107. End While
  108. End Using
  109. Else : End If
  110. For I As Integer = 0 To 名稱資料_dgv.Rows.Count - 1 : XX2 += 1 : Next : 數量1_lb.Text = "共 " & XX2 & " 個檔案"
  111. End If
  112. End Sub
  113. Private Sub 清除資料_dgv_Click(sender As Object, e As EventArgs) Handles 清除資料_dgv.Click
  114. 名稱資料_dgv.Rows.Clear()
  115. End Sub
  116. Private Sub 重新讀取_bt_Click(sender As Object, e As EventArgs) Handles 重新讀取_bt.Click
  117. 讀取資料()
  118. End Sub
  119. Private Sub 查詢_bt_Click(sender As Object, e As EventArgs) Handles 查詢_bt.Click
  120. Dim inputStr As String = InputBox("請輸入要查詢的噹案名稱(需要副檔名)!!")
  121. Dim isFound As Boolean = False
  122. 取變數 = inputStr
  123. For ii As Integer = 1 To Len(取變數)
  124. If ii = 1 Then : 驗證1 = Strings.Left(取變數, ii) : Else
  125. If Strings.Mid(取變數, ii, 1) = "." Then : Exit For : Else : 驗證1 &= Strings.Mid(取變數, ii, 1) : End If
  126. End If
  127. Next
  128. For Each row As DataGridViewRow In 名稱資料_dgv.Rows
  129. Dim cellValue As String = row.Cells(0).Value ' 假設 DataGridView 只有一個 column
  130. 取變數 = cellValue
  131. For ii As Integer = 1 To Len(取變數)
  132. If ii = 1 Then : 驗證2 = Strings.Left(取變數, ii) : Else
  133. If Strings.Mid(取變數, ii, 1) = "." Then : Exit For : Else : 驗證2 &= Strings.Mid(取變數, ii, 1) : End If
  134. End If
  135. Next
  136. If 驗證2 = 驗證1 Then : isFound = True : Exit For : End If ' 如果已經找到相同的字串,就可以直接退出迴圈了
  137. Next
  138. If isFound Then : MessageBox.Show("XXXXXX---重複---XXXXX!!") : Else : MessageBox.Show("----------可下載----------!!") : End If
  139. End Sub
  140. Private Sub 讀取料夾路徑_bt_Click(sender As Object, e As EventArgs) Handles 讀取料夾路徑_bt.Click
  141. '使用 FolderBrowserDialog 選擇資料夾
  142. Dim fbd As New FolderBrowserDialog()
  143. If fbd.ShowDialog() = DialogResult.OK Then '清除 DataGridView 中原本的資料
  144. 資料夾位置_tb.Text = fbd.SelectedPath
  145. 選取清單_dgv.Rows.Clear() : XX1 = 0 : MyModule1.計算結束() '掃描該位置內所有檔案名稱
  146. Dim files1() As String = IO.Directory.GetFiles(fbd.SelectedPath, "*.*", IO.SearchOption.TopDirectoryOnly)
  147. For Each dir As String In IO.Directory.GetDirectories(fbd.SelectedPath)
  148. If IO.Path.GetFileName(dir) = "System Volume Information" Or IO.Path.GetFileName(dir) = "$RECYCLE.BIN" Then Continue For
  149. files1 = files1.Concat(IO.Directory.GetFiles(dir, "*.*", IO.SearchOption.AllDirectories)).ToArray()
  150. Next
  151. For Each file As String In files1
  152. MyModule1.計算顯示1()
  153. If 檔名_ch.Checked = True Then
  154. 選取清單_dgv.Rows.Add(IO.Path.GetFileName(file))
  155. Else
  156. 選取清單_dgv.Rows.Add(file)
  157. End If
  158. XX1 += 1
  159. Next : MyModule1.計算結束()
  160. End If : 數量_lb.Text = "共 " & XX1 & " 個檔案"
  161. End Sub
  162. Private Sub 比對_bt_Click(sender As Object, e As EventArgs) Handles 比對_bt.Click
  163. XX4 = 0
  164. For Each rowB As DataGridViewRow In 選取清單_dgv.Rows
  165. Dim valueB As String = rowB.Cells(0).Value.ToString()
  166. Dim isExist As Boolean = False
  167. For Each rowA As DataGridViewRow In 名稱資料_dgv.Rows
  168. Dim valueA As String = rowA.Cells(0).Value.ToString()
  169. If valueA = valueB Then : isExist = True : Exit For : End If
  170. Next
  171. If Not isExist Then
  172. Dim index As Integer = 名稱資料_dgv.Rows.Add()
  173. 名稱資料_dgv.Rows(index).Cells(0).Value = valueB : XX4 += 1
  174. Else
  175. Dim index As Integer = 重複文件_dgv.Rows.Add()
  176. 重複文件_dgv.Rows(index).Cells(0).Value = valueB
  177. End If
  178. Next : XX2 = 0 : XX3 = 0 : 數量4_lb.Text = "新增 " & XX4 & " 個檔案" : DDF = True
  179. For I As Integer = 0 To 名稱資料_dgv.Rows.Count - 1 : XX2 += 1 : Next : 數量1_lb.Text = "共 " & XX2 & " 個檔案"
  180. For I As Integer = 0 To 重複文件_dgv.Rows.Count - 1 : XX3 += 1 : Next : 數量2_lb.Text = "重複文件共 " & XX3 & " 個檔案"
  181. MsgBox("新增 " & XX4 & " 個檔案!!" & vbCrLf & "請記得將檔案歸檔,下次才不會誤刪除!!")
  182. End Sub
  183. Private Sub 刪除重複_bt_Click(sender As Object, e As EventArgs) Handles 刪除重複_bt.Click
  184. Dim aa1 As MsgBoxResult = MsgBox("確定要刪除這些重複的檔案?", MsgBoxStyle.OkCancel)
  185. If aa1 = MsgBoxResult.Ok Then
  186. 刪除數 = 0
  187. For ii As Integer = 0 To 重複文件_dgv.Rows.Count - 1
  188. If IO.File.Exists(資料夾位置_tb.Text & "\" & 重複文件_dgv.Rows(ii).Cells(0).Value.ToString) Then
  189. IO.File.Delete(資料夾位置_tb.Text & "\" & 重複文件_dgv.Rows(ii).Cells(0).Value.ToString) : 刪除數 += 1
  190. End If
  191. Next : MsgBox("共刪除了 [" & 刪除數 & "] 個文件!!" & vbCrLf & "請記得將檔案歸檔,下次才不會誤刪除!!")
  192. 重複文件_dgv.Rows.Clear()
  193. End If
  194. End Sub
  195. Private Sub 存檔_bt_Click(sender As Object, e As EventArgs) Handles 存檔_bt.Click
  196. 存檔() : DDF = False
  197. End Sub
  198. Private Sub 存檔()
  199. SaveFileDialog1.FileName = "MyFile.csv"
  200. SaveFileDialog1.Filter = "CSV檔案 (*.csv)|*.csv"
  201. If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
  202. ' 取得使用者所選的檔案路徑
  203. Dim filePath As String = SaveFileDialog1.FileName
  204. ' 設定要使用的編碼方式,以避免存檔時亂碼
  205. Dim encoding As Encoding = Encoding.UTF8
  206. ' 開啟檔案準備寫入資料
  207. Using writer As New StreamWriter(filePath, False, encoding)
  208. ' 將 DataGridView 中的每一列資料寫入檔案
  209. For Each row As DataGridViewRow In 名稱資料_dgv.Rows
  210. ' 設定資料的分隔符號
  211. Dim delimiter As String = ","
  212. ' 將資料轉換成字串並寫入檔案
  213. Dim rowString As String = ""
  214. For Each cell As DataGridViewCell In row.Cells
  215. rowString &= cell.Value.ToString() & delimiter
  216. Next
  217. rowString = rowString.Substring(0, rowString.Length - delimiter.Length)
  218. writer.WriteLine(rowString)
  219. Next : MsgBox("存檔完成!!")
  220. End Using
  221. End If
  222. End Sub
  223. End Class