107 lines
4.0 KiB
VB.net
107 lines
4.0 KiB
VB.net
Imports System.IO
|
|
Imports DigitalData.Modules.Logging
|
|
|
|
''' <module>File</module>
|
|
''' <version>0.0.0.1</version>
|
|
''' <date>11.10.2018</date>
|
|
''' <summary>
|
|
''' Module that provides variouse File operations
|
|
''' </summary>
|
|
''' <dependencies>
|
|
''' NLog, >= 4.5.8
|
|
''' </dependencies>
|
|
''' <params>
|
|
''' LogConfig, DigitalData.Module.Logging.LogConfig
|
|
''' A LogConfig object
|
|
''' </params>
|
|
''' <props>
|
|
''' </props>
|
|
''' <example>
|
|
''' </example>
|
|
''' <remarks>
|
|
''' </remarks>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Removes files in a directory filtered by filename, extension and last write date
|
|
''' </summary>
|
|
''' <param name="Path">The directory in which files will be deleted</param>
|
|
''' <param name="FileKeepTime">Only delete files which are older than x days. Must be between 0 and 1000 days.</param>
|
|
''' <param name="FileBaseName">A filename filter which will be checked</param>
|
|
''' <param name="FileExtension">A file extension which will be checked</param>
|
|
''' <param name="ContinueOnError">Should the function continue with deleting when a file could not be deleted?</param>
|
|
''' <returns>True if all files were deleted or if no files were deleted, otherwise false</returns>
|
|
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
|
|
If Not Directory.Exists(Path) Then
|
|
Return False
|
|
End If
|
|
|
|
Dim oIsDirectory As Boolean = (System.IO.File.GetAttributes(Path) And FileAttributes.Directory) = FileAttributes.Directory
|
|
Return oIsDirectory
|
|
End Function
|
|
|
|
End Class
|