Поиск в папке и подпапках файлов, созданных или измененных за определенную дату - Visual Basic .NET
Формулировка задачи:
Есть папка(D:\wscom). В ней лежат файлы, папки, подпапки.
на форме текстовое поле(для ввода даты за которую необходимо осуществить поиск),
ListView (для вывода полного пути к файлу с его именем в первом столбце и датой и временем создания/изменения во втором)
и Кнопка(по которой запускается поиск файлов)
Необходимо осуществить поиск файлов созданных/измененных) за определенную дату в папке с файлами и подкаталогами.
Возможно ли еще сделать таймер поиска и ProgressBar и в Label отображать имя и путь файла, который просматривается в данный момент? (по возможности)
Заранее спасибо за помощь.
Решение задачи: «Поиск в папке и подпапках файлов, созданных или измененных за определенную дату»
textual
Листинг программы
Dim files() As String
Dim path As String = "D:\Base"
Dim cel_date As String = ""
Private Sub Search(e As System.ComponentModel.DoWorkEventArgs, ByVal fold As String, ByVal mask As String, ByVal Recur As Boolean)
Dim stack As Stack(Of String) = New Stack(Of String)
stack.Push(fold)
Do 'Цикл начинается
If BackgroundWorker1.CancellationPending Then 'Если нажимаем кнопку отмены ТО-
e.Cancel = True 'Возвращаем значение для отмены события "BackgroundWorker1" которое проверяется в "BackgroundWorker1_RunWorkerCompleted"
Exit Sub
End If
fold = stack.Pop() 'Если мы не ищем файлы в подпапках то в "stack" будет одна запись и цикл закончится быстро
Try
files = System.IO.Directory.GetFiles(fold, mask)
Dim last_write As String = ""
For i = 0 To files.Count - 1
last_write = IO.File.GetLastWriteTime(files(i))
If last_write.Contains(cel_date) Then
ListView1.Items.Add(files(i)).SubItems.Add(last_write)
End If
Next
Label1.Text = ListView1.Items.Count 'отображает кол-во найденных файлов
If Recur Then 'Если необходимо сканировать подпапки
For Each folder In IO.Directory.GetDirectories(fold)
stack.Push(folder)
Next
End If
Catch ex As Exception
End Try
Loop Until stack.Count = 0
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ListView1.Items.Clear()
cel_date = Split(DateTimePicker1.Value, " ")(0)
If BackgroundWorker1.IsBusy = False Then
ProgressBar1.Visible = True
BackgroundWorker1.RunWorkerAsync()
End If
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Search(e, path, "*.*", True)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Text = 0
CheckForIllegalCrossThreadCalls = False
ProgressBar1.Visible = False
ProgressBar1.Style = ProgressBarStyle.Marquee
ListView1.View = View.Details
ListView1.GridLines = True
ListView1.Columns.Add("Имя файла", 140, HorizontalAlignment.Left)
ListView1.Columns.Add("Дата изменеия", 242, HorizontalAlignment.Left)
ListView1.FullRowSelect = True
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
ProgressBar1.Visible = False
End Sub