Уборка и дедупликация файлов, перечисленных в datagridview


У меня есть следующий код, который просматривает каталоги, папки в datagridview таблицу и помещает все файлы в формат в списке, она также получает список их дату последнего изменения для дальнейшего использования в приложении.

Код работает, но он болит на глаза. Я хочу прибраться в следующие циклы, чтобы улучшить эффективность - то, что я имею в виду, что у меня есть цикл for В цикле for, который создает список файлов, то у меня есть два отдельных делать, пока петли, которые поиск по списку от начала до конца, чтобы забрать оттуда имена файлов, которые нуждаются в корректировке.

Мне было бы очень интересно узнать, лучший способ достичь того же результата, как и мои познания о эффективности кодирования довольно элементарные. В принципе, это можно сделать в одном или двух петель, как идея зацикливания через списки дважды, кажется неэффективным?

Public Class
Private Sub btnDirectory_Click(sender As Object, e As EventArgs) Handles btnDirectory.Click

Dim FileNames As New List(Of String)
Dim FileDates As New List(Of Date)

Dim DocNo As String
Dim rowCheck As String
Dim ProjectNo As String = "1111"
Dim FileNameCheck As String
Dim str As String

Dim k As Integer = 0 
Dim i As Integer
Dim j As Integer

'The first loop grabs all files of the wanted format from a datagridview table containing all directories to be checked

For Each rw In Background.Table1.Rows

    rowCheck = Background.Table1(0, k).Value
    If Not String.IsNullOrEmpty(rowCheck) Then

    For Each file As String In My.Computer.FileSystem.GetFiles(Background.Table1(0, k).Value)
        CorrectType = False
        FileNameCheck = IO.Path.GetFileNameWithoutExtension(file)
        If FileNameCheck.Contains(ProjectNo) AndAlso FileNameCheck.Contains("-") AndAlso Not String.IsNullOrEmpty(FileNameCheck) AndAlso FileNameCheck.Contains(" ") Then
            DocNo = FileNameCheck.Substring(0, FileNameCheck.IndexOf(" "))
            If FileNameCheck.Substring(0, FileNameCheck.IndexOf("-")) = ProjectNo AndAlso CountLetters(DocNo) = 3 Then
                FileNames.Add(FileNameCheck)
                FileDates.Add(IO.File.GetLastWriteTime(file))                                
            End If
        End If


    Next
    End If

    k += 1

Next

'The next loop tidies up the file formats that contain a "-00-" in their names

 j = FileNames.Count
 i = 0
 Do
     str = FileNames(i)
     If str.Contains("-00-") Then                           
         FileNames(i) = RemoveChar(str, "-00-") ' RemoveChar is a function that replaces "-00-" with a "-"
     End If
     i += 1
 Loop Until i = j

 i = 0
 j = FileNames.Count


 'Finally, this loop checks that no two files have the exact same name, and gets rid of one of them if that is the case

 Do

     Dim st1 As String = FileNames(j - 1)
     Dim st2 As String = FileNames(j - 2)

     If st1 = st2 Then          
         FileNames.RemoveAt(j - 1)
         FileDates.RemoveAt(j - 1)
     End If
     j -=  1
 Loop Until j = 1


 End Sub


End Class


116
5
задан 23 февраля 2018 в 11:02 Источник Поделиться
Комментарии