Imports System.IO Imports System.Net.WebRequestMethods Imports System.Text Imports System.Windows.Forms.VisualStyles.VisualStyleElement Public Class Form1 Dim 刪除數, XX1, XX2, XX3, XX4 As Integer Dim Str As String = Application.StartupPath Dim 驗證1, 驗證2 As String : Dim 取變數 As String Dim DDF As Boolean Dim 總數, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13 As Integer Private Sub 讀取料夾路徑_bt_MouseEnter(sender As Object, e As EventArgs) Handles 讀取料夾路徑_bt.MouseEnter ToolTip1.SetToolTip(Me.讀取料夾路徑_bt, "讀取資料夾內部所有文件") End Sub Private Sub 比對_bt_MouseEnter(sender As Object, e As EventArgs) Handles 比對_bt.MouseEnter ToolTip1.SetToolTip(Me.比對_bt, "檔案比對並將新增檔案加入清單") End Sub Private Sub 存檔_bt_MouseEnter(sender As Object, e As EventArgs) Handles 存檔_bt.MouseEnter ToolTip1.SetToolTip(Me.存檔_bt, "存檔") End Sub Private Sub 清除資料_dgv_MouseEnter(sender As Object, e As EventArgs) Handles 清除資料_dgv.MouseEnter ToolTip1.SetToolTip(Me.清除資料_dgv, "清除檔案資料") End Sub Private Sub 刪除重複_bt_MouseEnter(sender As Object, e As EventArgs) Handles 刪除重複_bt.MouseEnter ToolTip1.SetToolTip(Me.刪除重複_bt, "刪除被比對的資料夾內重複的資料 (請小心使用)!!") End Sub Private Sub 查詢_bt_MouseEnter(sender As Object, e As EventArgs) Handles 查詢_bt.MouseEnter ToolTip1.SetToolTip(Me.查詢_bt, "從檔案清單中查詢檔名查詢") End Sub Private Sub 重新讀取_bt_MouseEnter(sender As Object, e As EventArgs) Handles 重新讀取_bt.MouseEnter ToolTip1.SetToolTip(Me.重新讀取_bt, "開啟舊檔") End Sub Private Sub 檔名_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 檔名_ch.Click 檔名_ch.Checked = True : 路徑_ch.Checked = False End Sub Private Sub 路徑_ch_CheckedChanged(sender As Object, e As EventArgs) Handles 路徑_ch.Click 檔名_ch.Checked = False : 路徑_ch.Checked = True End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ToolTip1.ToolTipTitle = "功能說明" 分流運算.Enabled = True End Sub Private Sub Form1_Closing(sender As Object, e As EventArgs) Handles MyBase.Closing If DDF = True Then Dim aa1 As MsgBoxResult = MsgBox("有比對動作還沒有執行存檔,是否執行?", MsgBoxStyle.OkCancel) If aa1 = MsgBoxResult.Ok Then : 存檔() : End If End If If IO.File.Exists(Str & "\RECORDER.csv") Then : IO.File.Delete(Str & "\RECORDER.csv") : End If End Sub Private Sub 分流運算_Tick(sender As Object, e As EventArgs) Handles 分流運算.Tick 分流運算.Enabled = False 選取清單_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6) 選取清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 選取清單_dgv.ColumnHeadersHeight = 25 : 選取清單_dgv.AllowUserToAddRows = False 選取清單_dgv.RowTemplate.Height = 20 : 選取清單_dgv.Columns(0).FillWeight = 30 選取清單_dgv.Columns(0).ReadOnly = True 名稱資料_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6) 名稱資料_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 名稱資料_dgv.ColumnHeadersHeight = 25 : 名稱資料_dgv.AllowUserToAddRows = False 名稱資料_dgv.RowTemplate.Height = 20 : 名稱資料_dgv.Columns(0).FillWeight = 30 名稱資料_dgv.Columns(0).ReadOnly = True 重複文件_dgv.RowsDefaultCellStyle.Font = New System.Drawing.Font("微軟正黑體", 7.6) 重複文件_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing 重複文件_dgv.ColumnHeadersHeight = 25 : 重複文件_dgv.AllowUserToAddRows = False 重複文件_dgv.RowTemplate.Height = 20 : 重複文件_dgv.Columns(0).FillWeight = 30 重複文件_dgv.Columns(0).ReadOnly = True DDF = False XX1 = 0 : 數量_lb.Text = "共 " & XX1 & " 個檔案" : XX2 = 0 : 數量1_lb.Text = "共 " & XX2 & " 個檔案" XX3 = 0 : 數量2_lb.Text = "重複文件共 " & XX3 & " 個檔案" : XX4 = 0 : 數量4_lb.Text = "新增 " & XX4 & " 個檔案" 讀取資料() End Sub Private Sub 讀取資料() OpenFileDialog1.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*" OpenFileDialog1.FilterIndex = 1 OpenFileDialog1.Multiselect = False If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then Dim csvFilePath As String = OpenFileDialog1.FileName If IO.File.Exists(csvFilePath) Then Dim filePath As String = csvFilePath ' 設定要使用的編碼方式,以避免讀取時亂碼 Dim encoding As Encoding = Encoding.UTF8 ' 開啟檔案準備讀取資料 Using reader As New StreamReader(filePath, encoding) ' 逐行讀取檔案並新增至 DataGridView 中 Dim line As String While Not reader.EndOfStream line = reader.ReadLine() Dim values As String() = line.Split(",") 名稱資料_dgv.Rows.Add(values) End While End Using Else : End If For I As Integer = 0 To 名稱資料_dgv.Rows.Count - 1 : XX2 += 1 : Next : 數量1_lb.Text = "共 " & XX2 & " 個檔案" Else If IO.File.Exists(Str & "\RECORDER.csv") Then : IO.File.Delete(Str & "\RECORDER.csv") : End If If IO.File.Exists(Str & "\RECORDER.csv") Then Dim filePath As String = Str & "\RECORDER.csv" ' 設定要使用的編碼方式,以避免讀取時亂碼 Dim encoding As Encoding = Encoding.UTF8 ' 開啟檔案準備讀取資料 Using reader As New StreamReader(filePath, encoding) ' 逐行讀取檔案並新增至 DataGridView 中 Dim line As String While Not reader.EndOfStream line = reader.ReadLine() Dim values As String() = line.Split(",") 名稱資料_dgv.Rows.Add(values) End While End Using Else : End If For I As Integer = 0 To 名稱資料_dgv.Rows.Count - 1 : XX2 += 1 : Next : 數量1_lb.Text = "共 " & XX2 & " 個檔案" End If End Sub Private Sub 清除資料_dgv_Click(sender As Object, e As EventArgs) Handles 清除資料_dgv.Click 名稱資料_dgv.Rows.Clear() End Sub Private Sub 重新讀取_bt_Click(sender As Object, e As EventArgs) Handles 重新讀取_bt.Click 讀取資料() End Sub Private Sub 查詢_bt_Click(sender As Object, e As EventArgs) Handles 查詢_bt.Click Dim inputStr As String = InputBox("請輸入要查詢的噹案名稱(需要副檔名)!!") Dim isFound As Boolean = False 取變數 = inputStr For ii As Integer = 1 To Len(取變數) If ii = 1 Then : 驗證1 = Strings.Left(取變數, ii) : Else If Strings.Mid(取變數, ii, 1) = "." Then : Exit For : Else : 驗證1 &= Strings.Mid(取變數, ii, 1) : End If End If Next For Each row As DataGridViewRow In 名稱資料_dgv.Rows Dim cellValue As String = row.Cells(0).Value ' 假設 DataGridView 只有一個 column 取變數 = cellValue For ii As Integer = 1 To Len(取變數) If ii = 1 Then : 驗證2 = Strings.Left(取變數, ii) : Else If Strings.Mid(取變數, ii, 1) = "." Then : Exit For : Else : 驗證2 &= Strings.Mid(取變數, ii, 1) : End If End If Next If 驗證2 = 驗證1 Then : isFound = True : Exit For : End If ' 如果已經找到相同的字串,就可以直接退出迴圈了 Next If isFound Then : MessageBox.Show("XXXXXX---重複---XXXXX!!") : Else : MessageBox.Show("----------可下載----------!!") : End If End Sub Private Sub 讀取料夾路徑_bt_Click(sender As Object, e As EventArgs) Handles 讀取料夾路徑_bt.Click '使用 FolderBrowserDialog 選擇資料夾 Dim fbd As New FolderBrowserDialog() If fbd.ShowDialog() = DialogResult.OK Then '清除 DataGridView 中原本的資料 資料夾位置_tb.Text = fbd.SelectedPath 選取清單_dgv.Rows.Clear() : XX1 = 0 : MyModule1.計算結束() '掃描該位置內所有檔案名稱 Dim files1() As String = IO.Directory.GetFiles(fbd.SelectedPath, "*.*", IO.SearchOption.TopDirectoryOnly) For Each dir As String In IO.Directory.GetDirectories(fbd.SelectedPath) If IO.Path.GetFileName(dir) = "System Volume Information" Or IO.Path.GetFileName(dir) = "$RECYCLE.BIN" Then Continue For files1 = files1.Concat(IO.Directory.GetFiles(dir, "*.*", IO.SearchOption.AllDirectories)).ToArray() Next For Each file As String In files1 MyModule1.計算顯示1() If 檔名_ch.Checked = True Then 選取清單_dgv.Rows.Add(IO.Path.GetFileName(file)) Else 選取清單_dgv.Rows.Add(file) End If XX1 += 1 Next : MyModule1.計算結束() End If : 數量_lb.Text = "共 " & XX1 & " 個檔案" End Sub Private Sub 比對_bt_Click(sender As Object, e As EventArgs) Handles 比對_bt.Click XX4 = 0 For Each rowB As DataGridViewRow In 選取清單_dgv.Rows Dim valueB As String = rowB.Cells(0).Value.ToString() Dim isExist As Boolean = False For Each rowA As DataGridViewRow In 名稱資料_dgv.Rows Dim valueA As String = rowA.Cells(0).Value.ToString() If valueA = valueB Then : isExist = True : Exit For : End If Next If Not isExist Then Dim index As Integer = 名稱資料_dgv.Rows.Add() 名稱資料_dgv.Rows(index).Cells(0).Value = valueB : XX4 += 1 Else Dim index As Integer = 重複文件_dgv.Rows.Add() 重複文件_dgv.Rows(index).Cells(0).Value = valueB End If Next : XX2 = 0 : XX3 = 0 : 數量4_lb.Text = "新增 " & XX4 & " 個檔案" : DDF = True For I As Integer = 0 To 名稱資料_dgv.Rows.Count - 1 : XX2 += 1 : Next : 數量1_lb.Text = "共 " & XX2 & " 個檔案" For I As Integer = 0 To 重複文件_dgv.Rows.Count - 1 : XX3 += 1 : Next : 數量2_lb.Text = "重複文件共 " & XX3 & " 個檔案" MsgBox("新增 " & XX4 & " 個檔案!!" & vbCrLf & "請記得將檔案歸檔,下次才不會誤刪除!!") End Sub Private Sub 刪除重複_bt_Click(sender As Object, e As EventArgs) Handles 刪除重複_bt.Click Dim aa1 As MsgBoxResult = MsgBox("確定要刪除這些重複的檔案?", MsgBoxStyle.OkCancel) If aa1 = MsgBoxResult.Ok Then 刪除數 = 0 For ii As Integer = 0 To 重複文件_dgv.Rows.Count - 1 If IO.File.Exists(資料夾位置_tb.Text & "\" & 重複文件_dgv.Rows(ii).Cells(0).Value.ToString) Then IO.File.Delete(資料夾位置_tb.Text & "\" & 重複文件_dgv.Rows(ii).Cells(0).Value.ToString) : 刪除數 += 1 End If Next : MsgBox("共刪除了 [" & 刪除數 & "] 個文件!!" & vbCrLf & "請記得將檔案歸檔,下次才不會誤刪除!!") 重複文件_dgv.Rows.Clear() End If End Sub Private Sub 存檔_bt_Click(sender As Object, e As EventArgs) Handles 存檔_bt.Click 存檔() : DDF = False End Sub Private Sub 存檔() SaveFileDialog1.FileName = "MyFile.csv" SaveFileDialog1.Filter = "CSV檔案 (*.csv)|*.csv" If SaveFileDialog1.ShowDialog() = DialogResult.OK Then ' 取得使用者所選的檔案路徑 Dim filePath As String = SaveFileDialog1.FileName ' 設定要使用的編碼方式,以避免存檔時亂碼 Dim encoding As Encoding = Encoding.UTF8 ' 開啟檔案準備寫入資料 Using writer As New StreamWriter(filePath, False, encoding) ' 將 DataGridView 中的每一列資料寫入檔案 For Each row As DataGridViewRow In 名稱資料_dgv.Rows ' 設定資料的分隔符號 Dim delimiter As String = "," ' 將資料轉換成字串並寫入檔案 Dim rowString As String = "" For Each cell As DataGridViewCell In row.Cells rowString &= cell.Value.ToString() & delimiter Next rowString = rowString.Substring(0, rowString.Length - delimiter.Length) writer.WriteLine(rowString) Next : MsgBox("存檔完成!!") End Using End If End Sub End Class