123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- 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
|