diff --git a/Filesystem/File.vb b/Filesystem/File.vb
index cebef1f7..4e0fcecb 100644
--- a/Filesystem/File.vb
+++ b/Filesystem/File.vb
@@ -41,6 +41,7 @@ Public Class File
' This prevents an infinite loop when no file can be created in a location
Private Const MAX_FILE_VERSION = 100
+ Private Const VERSION_SEPARATOR As Char = "~"c
Private Const FILE_NAME_ACCESS_TEST = "accessTest.txt"
@@ -123,7 +124,7 @@ Public Class File
''' Filepath to check
''' Versioned string
Public Function GetVersionedFilename(pFilePath As String) As String
- Return GetVersionedFilenameWithFilecheck(pFilePath, Function(pPath As String) IO.File.Exists(pFilePath))
+ Return GetVersionedFilenameWithFilecheck(pFilePath, Function(pPath As String) IO.File.Exists(pPath))
End Function
'''
@@ -140,14 +141,11 @@ Public Class File
Dim oDestinationDir = Path.GetDirectoryName(oFileName)
Dim oExtension = Path.GetExtension(oFileName)
- Dim oVersionSeparator As Char = "~"c
-
-
Dim oFileNameWithoutExtension = Path.GetFileNameWithoutExtension(oFileName)
- Dim oSplitResult = GetVersionedString(oFileNameWithoutExtension, oVersionSeparator)
+ Dim oSplitResult = GetVersionedString(oFileNameWithoutExtension)
oFileNameWithoutExtension = oSplitResult.Item1
- Dim oFileVersion = oSplitResult.Item2
+ Dim oFileVersion As Integer = oSplitResult.Item2
' Shorten the filename (only filename, without extension or version)
' by cutting the length in half. This should work no matter how long the path and/or filename are.
@@ -165,15 +163,15 @@ Public Class File
' while file exists, increment version.
' version cannot go above MAX_FILE_VERSION, to prevent infinite loop
Do
- If oFileVersion >= MAX_FILE_VERSION Then
- Throw New OverflowException($"Tried '{MAX_FILE_VERSION}' times to version filename before giving up. Sorry.")
- End If
-
- oFinalFileName = Path.Combine(oDestinationDir, GetFilenameWithVersion(oFileNameWithoutExtension, oVersionSeparator, oFileVersion, oExtension))
+ oFinalFileName = Path.Combine(oDestinationDir, GetFilenameWithVersion(oFileNameWithoutExtension, oFileVersion, oExtension))
_Logger.Debug("Intermediate Filename is {0}", oFinalFileName)
_Logger.Debug("File version: {0}", oFileVersion)
oFileVersion += 1
- Loop While pFileExistsAction(oFinalFileName) = True
+ Loop While pFileExistsAction(oFinalFileName) = True And oFileVersion < MAX_FILE_VERSION
+
+ If oFileVersion >= MAX_FILE_VERSION Then
+ Throw New OverflowException($"Tried '{MAX_FILE_VERSION}' times to version filename before giving up. Sorry.")
+ End If
_Logger.Debug("Final Filename is {0}", oFinalFileName)
@@ -200,8 +198,8 @@ Public Class File
''' The string to versioned
''' The character to split at
''' Tuple of string and version
- Public Function GetVersionedString(pString As String, pSeparator As Char) As Tuple(Of String, Integer)
- Dim oSplitString = pString.Split(pSeparator).ToList()
+ Public Function GetVersionedString(pString As String) As Tuple(Of String, Integer)
+ Dim oSplitString = pString.Split(VERSION_SEPARATOR).ToList()
Dim oStringVersion As Integer
' if string is already versioned, extract string version
@@ -231,11 +229,11 @@ Public Class File
Return Path.Combine(oLocalAppData, CompanyName, ProductName)
End Function
- Private Function GetFilenameWithVersion(FileNameWithoutExtension As String, VersionSeparator As Char, FileVersion As Integer, Extension As String) As String
+ Private Function GetFilenameWithVersion(FileNameWithoutExtension As String, FileVersion As Integer, Extension As String) As String
If FileVersion <= 1 Then
Return $"{FileNameWithoutExtension}{Extension}"
Else
- Return $"{FileNameWithoutExtension}{VersionSeparator}{FileVersion}{Extension}"
+ Return $"{FileNameWithoutExtension}{VERSION_SEPARATOR}{FileVersion}{Extension}"
End If
End Function