Заполните ListBox файлами Excel старше x месяца - PullRequest
0 голосов
/ 14 ноября 2018

Я делаю проект WinForm, который показывает мне все файлы Excel старше x месяцев выбранной папки.
Я могу заполнить ListBox всеми файлами Excel (см. Код ниже).
В выборе старше, чем x месяц, мне не удается.Я думаю, что должен работать с LastWriteTime, но не могу найти, как его использовать.

Может ли кто-нибудь помочь мне найти решение по этому вопросу?

Private Sub ListFiles(ByVal folderPath As String)
    filesListBox.Items.Clear()

    Dim fileNames As String() =
        System.IO.Directory.GetFiles(folderPath,
            "*.xl*", System.IO.SearchOption.TopDirectoryOnly)

    For Each fileName As String In fileNames
        fileslistbox.Items.Add(fileName)
    Next
End Sub

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Информация о времени создания файла / времени последней записи возвращается классом FileInfo , который предоставляет время создания, время последней записи и время последнего доступа к файлу через FileSystemInfo class.

Посмотрите, нужно ли вам Время создания файла или Время последней записи, в зависимости от ваших требований.
Время последнего доступа может возвращать только создание файла DateTime, в зависимости от системы.

Пример с измененным методом ListFiles:
Я добавил в метод параметр OlderThanMonths, который используется для указания сколько лет файл должен быть включен в список.
Здесь ссылка DateTime равна LastWriteTime.

Private Sub ListFiles(ByVal folderPath As String, OlderThanMonths As Integer)
    filesListBox.Items.Clear()

    Dim fileNames As String() = Directory.GetFiles(folderPath, "*.xl*", SearchOption.TopDirectoryOnly)

    ListBox1.BeginUpdate()
    For Each fileName As String In fileNames
        Dim FIinfo As New FileInfo(fileName)
        If FIinfo.LastWriteTime.AddMonths(OlderThanMonths) <= Date.Now Then
            filesListBox.Items.Add(fileName)
        End If
    Next
    ListBox1.EndUpdate()
End Sub

Или с LINQ Where() фильтр:

Private Sub ListFiles(ByVal folderPath As String, OlderThanMonths As Integer)
    filesListBox.Items.Clear()

    filesListBox.Items.AddRange(
        Directory.GetFiles(folderPath, "*.xl*", SearchOption.TopDirectoryOnly).
                  Where(Function(f) New FileInfo(f).LastWriteTime.AddMonths(OlderThanMonths) <= Date.Now).
                  ToArray())
End Sub
0 голосов
/ 14 ноября 2018

Вы почти у цели.Просто нужно добавить предложение IF, чтобы проверить дату изменения.

Проверьте этот пример кода:

Private Sub ListFiles(ByVal folderPath As String)
    filesListBox.Items.Clear()

    Dim fileNames As String() =
        System.IO.Directory.GetFiles(folderPath,
            "*.xl*", System.IO.SearchOption.TopDirectoryOnly)

    For Each fileName As String In fileNames
        Dim dtFileModifiedDate As DateTime = IO.File.GetLastWriteTime(fileName)
        Dim dtCustomDate As DateTime = DateTime.ParseExact(20180401, "yyyyMMdd", Globalization.CultureInfo.InvariantCulture)
        If dtFileModifiedDate > dtCustomDate Then
            filesListBox.Items.Add(fileName)
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...