diff --git a/Modules.Filesystem/File.vb b/Modules.Filesystem/File.vb index 941e91ea..12888f33 100644 --- a/Modules.Filesystem/File.vb +++ b/Modules.Filesystem/File.vb @@ -1,4 +1,5 @@ Imports System.IO +Imports System.Text.RegularExpressions Imports DigitalData.Modules.Logging ''' File @@ -24,13 +25,46 @@ Public Class File Private ReadOnly _logger As Logger Private ReadOnly _logConfig As LogConfig + Private ReadOnly _invalidFilenameChars As String + Private ReadOnly _invalidPathChars As String + + Private Const REGEX_CLEAN_FILENAME As String = "[\\/:""<>|\b\0\r\n\t]" + Private Const REGEX_CLEAN_PATH As String = "[:""<>|\b\0\r\n\t]" + Private Const FILE_NAME_ACCESS_TEST = "accessTest.txt" Public Sub New(LogConfig As LogConfig) _logConfig = LogConfig _logger = LogConfig.GetLogger() + + _invalidFilenameChars = String.Join("", Path.GetInvalidFileNameChars()) + _invalidPathChars = String.Join("", Path.GetInvalidPathChars()) End Sub + Public Function GetCleanFilename(FileName As String) As String + _logger.Debug("Filename before cleaning: [{0}]", FileName) + + Dim oCleanName As String = FileName + oCleanName = Regex.Replace(oCleanName, _invalidFilenameChars, String.Empty) + oCleanName = Regex.Replace(oCleanName, REGEX_CLEAN_FILENAME, String.Empty, RegexOptions.Singleline) + + _logger.Debug("Filename after cleaning: [{0}]", oCleanName) + + Return oCleanName + End Function + + Public Function GetCleanPath(FilePath As String) As String + _logger.Debug("Path before cleaning: [{0}]", FilePath) + + Dim oCleanName As String = FilePath + oCleanName = Regex.Replace(oCleanName, _invalidPathChars, String.Empty) + oCleanName = Regex.Replace(oCleanName, REGEX_CLEAN_FILENAME, String.Empty, RegexOptions.Singleline) + + _logger.Debug("Path after cleaning: [{0}]", oCleanName) + + Return oCleanName + End Function + ''' ''' Adds fileversions to given filename `Destination` if that file already exists. '''