Index: TAOR-rework-bugfixing/TAOR rework/LogBestandTextMapper.vb =================================================================== diff -u -r1620 -r1621 --- TAOR-rework-bugfixing/TAOR rework/LogBestandTextMapper.vb (.../LogBestandTextMapper.vb) (revision 1620) +++ TAOR-rework-bugfixing/TAOR rework/LogBestandTextMapper.vb (.../LogBestandTextMapper.vb) (revision 1621) @@ -1,16 +1,24 @@ Imports System.IO +Imports System.Text.RegularExpressions Module LogBestandTextMapper Const AantalLogs As Integer = 5 Dim _busy As Boolean - Private _currentLogPath As String = "" - Public ReadOnly Property CurrentLogPath() As String + Private _vorigeLogPad = String.Empty + Public ReadOnly Property VorigeLogPad() As String Get - Return _currentLogPath + Return _vorigeLogPad End Get End Property + Private _huidigeLogPad = String.Empty + Public ReadOnly Property HuidigeLogPad() As String + Get + Return _huidigeLogPad + End Get + End Property + ''' ''' Wegschrijven van entry in het logbestand. ''' @@ -28,7 +36,7 @@ Try 'Stream writer initialiseren met pad naar het log bestand. Tekst wordt niet overschreven, maar toegevoegd. - Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_currentLogPath, True) + Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_huidigeLogPad, True) 'De tekst die wordt weggeschreven opbouwen: datum databank naam status bericht. Dim logText = String.Format("{0,-23}{1,-10}{3,-13}{2}", Now.ToString("yyyy-MM-dd HH:mm:ss"), databank, logMessage, If(voltooid, "VOLTOOID!", "")) 'Wegschrijven. @@ -45,9 +53,9 @@ 'Hoofding opbouwen. Dim hoofding = String.Format("{0,-23}{1,-10}{3,-13}{2}", "Datum", "Databank", "Bericht", "Status") 'Nieuw log bestand aanmaken en pad er naartoe opslaan. - _currentLogPath = MaakNieuweLogFile() + _huidigeLogPad = MaakNieuweLogFile() 'Streamwriter initialiseren. - Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_currentLogPath, False) + Dim streamWriter = My.Computer.FileSystem.OpenTextFileWriter(_huidigeLogPad, False) 'Hoofding wegschrijven. streamWriter.WriteLine(hoofding) 'Stream sluiten. @@ -57,28 +65,48 @@ End Try End Sub - Public Function GeefPathLaatsteLogFile() As String - 'Variabelen declareren. - Dim bestandsnaam as String = String.Empty - Dim laatsteWijzigingTijdstip As Date + ''' + ''' Naam van de vorige log. + ''' Als het nieuwe log bestand nog niet is aangemaakt is dit het meest recente. Indien dit wel het geval is, wordt het tweede meest recente log bestand gekozen. + ''' + ''' + Public Function GeefPadVorigeLog() As String + Try + 'Nummers en paden opvragen. + Dim nummersEnPadenDict = GeefLogNummersEnPaden() - 'Log map opvragen. - dim pathLogFolder = GetPathLogFolder() - 'Alle bestanden hierin overlopen. - For each fileName in Directory.EnumerateFiles(pathLogFolder) - 'Pad naar bestand opbouwen. - dim filePath = Path.Combine(pathLogFolder, fileName) - 'Tijdstip laatste wijziging. - dim lastChanged = System.IO.File.GetLastWriteTimeUtc(filePath) - 'Controleren of de datum van dit bestand recenter is. - If bestandsnaam is String.Empty OrElse (lastChanged > laatsteWijzigingTijdstip) Then - 'Zo ja, registreer dit bestand. - bestandsnaam = fileName - laatsteWijzigingTijdstip = lastChanged + 'Controleren of er wel logs beschikbaar zijn, anders lege string retourneren. + If nummersEnPadenDict.Count = 0 Then + 'Nog geen logs aanwezig. + Return String.Empty + ElseIf nummersEnPadenDict.Count = 1 And (Not String.IsNullOrEmpty(_huidigeLogPad)) Then + 'Er is een log aanwezig, maar dit is de huidige log. + Return String.Empty End If - Next - Return bestandsnaam + 'Nummers uit dictionary halen. + Dim nummers = nummersEnPadenDict.Keys.ToList() + + 'Log nummers sorteren oud -> nieuw. + nummers.Sort() + + 'Nummer van de juiste log. + Dim nummerLog As Integer + + 'Kijken of het nieuwe log bestand al is aangemaakt. + If String.IsNullOrEmpty(_huidigeLogPad) Then + 'Zo ja, retourneer het voorlaatste pad. + nummerLog = nummers.Item(nummers.Count - 1) + Else + 'Zo neen, retourneer laatste pad. + nummerLog = nummers.Item(nummers.Count) + End If + + 'Pad opvragen uit dictionary en retourneren. + Return nummersEnPadenDict.Item(nummerLog) + Catch ex As Exception + Throw New Exception($"Kon pad naar vorige log niet opvragen.{vbNewLine}{ex.Message}") + End Try End Function Private Function MaakNieuweLogFile() As String @@ -107,16 +135,49 @@ Throw New Exception("Er is iets fout gelopen bij het opvragen van het Path voor de log bestanden") End Function - Public Function GetPathLogFolder() As String - 'Opvragen van het pad naar het bureaublad - Dim logFolderPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) - Dim logfolder As String = "TAOR REWORK LOGS" - logFolderPath = Path.Combine(logFolderPath, logfolder) - 'als de folder nog niet bestaat, aanmaken - If (Not System.IO.Directory.Exists(logFolderPath)) Then - System.IO.Directory.CreateDirectory(logFolderPath) + Private Function GeefLogNummersEnPaden() As Dictionary(Of Integer, String) + 'Dictionary initialiseren met als sleutel de nummer en value het pad van de log. + Dim nummersEnPadenDict = New Dictionary(Of Integer, String) + + 'Log map opvragen. + Dim pathLogFolder = GetPathLogFolder() + 'Alle bestanden hierin overlopen en opslaan in lijst. + Dim logBestandspaden = Directory.EnumerateFiles(pathLogFolder).ToList() + + 'Controleren of er wel logs beschikbaar zijn, anders lege dictionary retourneren. + If logBestandspaden.Count = 0 Then + 'Nog geen logs aanwezig. + Return nummersEnPadenDict End If - Return logFolderPath + + 'Log nummer uit het pad halen. + + 'Dictionary vullen. + For Each pad In logBestandspaden + 'Laatste nummer nemen, dat nadien niet wordt gevolgd door een nummer. + Dim nummer = Regex.Match(pad, "(\d+)(?!.*\d)").Value + 'Toevoegen aan dictionary. + nummersEnPadenDict.Add(nummer, pad) + Next + + 'Opgevulde dictionary retourneren. + Return nummersEnPadenDict End Function + Public Function GetPathLogFolder() As String + Try + 'Opvragen van het pad naar het bureaublad. + Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + 'Pad naar log folder opbouwen. + Dim logFolderPath = Path.Combine(desktopPath, "TAOR REWORK LOGS") + 'Als de folder nog niet bestaat, aanmaken. + If (Not Directory.Exists(logFolderPath)) Then + Directory.CreateDirectory(logFolderPath) + End If + Return logFolderPath + Catch ex As Exception + Throw New Exception($"Kon pad van de map met logs niet opvragen of kon map niet aanmaken.{vbNewLine}{ex.Message}") + End Try + End Function + End Module \ No newline at end of file