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.
'''