Imports System.IO Imports DigitalData.Modules.Logging ''' File ''' 0.0.0.1 ''' 11.10.2018 ''' ''' Module that provides variouse File operations ''' ''' ''' NLog, >= 4.5.8 ''' ''' ''' LogConfig, DigitalData.Module.Logging.LogConfig ''' A LogConfig object ''' ''' ''' ''' ''' ''' ''' Public Class File Private ReadOnly _logger As Logger Private ReadOnly _logConfig As LogConfig Public Sub New(LogConfig As LogConfig) _logConfig = LogConfig _logger = LogConfig.GetLogger() End Sub ''' ''' Removes files in a directory filtered by filename, extension and last write date ''' ''' The directory in which files will be deleted ''' Only delete files which are older than x days. Must be between 0 and 1000 days. ''' A filename filter which will be checked ''' A file extension which will be checked ''' Should the function continue with deleting when a file could not be deleted? ''' True if all files were deleted or if no files were deleted, otherwise false Public Function RemoveFiles(Path As String, FileKeepTime As Integer, FileBaseName As String, Optional FileExtension As String = "log", Optional ContinueOnError As Boolean = True) As Boolean If Not TestPathIsDirectory(Path) Then Throw New ArgumentException($"Path {Path} is not a directory!") End If If Not Directory.Exists(Path) Then Throw New DirectoryNotFoundException($"Path {Path} does not exist!") End If If FileKeepTime < 0 Or FileKeepTime > 1000 Then Throw New ArgumentOutOfRangeException("FileKeepTime must be an integer between 0 and 1000!") End If Dim oUnableToDeleteCounter = 0 Dim oDirectory As New DirectoryInfo(Path) Dim oDateLimit As DateTime = DateTime.Now.AddDays(FileKeepTime) Dim oFiles As List(Of FileInfo) = oDirectory. EnumerateFiles($"*{FileBaseName}*"). Where(Function(oFileInfo As FileInfo) Return oFileInfo.Extension = FileExtension And oFileInfo.LastWriteTime < oDateLimit End Function) If oFiles.Count = 0 Then _logger.Debug("No files found that match the criterias.") Return True End If _logger.Debug("Deleting old files (Found {0}).", oFiles.Count) For Each oFile As FileInfo In oFiles Try oFile.Delete() Catch ex As Exception If ContinueOnError = False Then _logger.Warn("Deleting files was aborted at file {0}.", oFile.FullName) Return False End If oUnableToDeleteCounter = oUnableToDeleteCounter + 1 _logger.Warn("File {0} could not be deleted!") End Try Next If oUnableToDeleteCounter > 0 Then _logger.Debug("Old files partially removed. {0} files could not be removed.", oUnableToDeleteCounter) Else _logger.Debug("Old files removed.") End If Return True End Function Public Sub MoveTo(FilePath As String, Directory As String) Dim oFileInfo As New FileInfo(FilePath) IO.File.Move(FilePath, Path.Combine(Directory, oFileInfo.Name)) End Sub Public Function TestPathIsDirectory(Path As String) As Boolean Dim oIsDirectory As Boolean = (System.IO.File.GetAttributes(Path) And FileAttributes.Directory) = FileAttributes.Directory Return oIsDirectory End Function End Class