Поиск в папке и подпапках файлов, созданных или измененных за определенную дату - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д