好吧,在过去的几个小时里,这个问题一直让我陷入困境,我觉得我几乎可以尝到胜利的滋味,但我被困住了。
我正在根据用户提供的要求将文件写入目录,此特定部分涉及为新文件分配新的版本号
。基本上,这使用以下命名约定创建新文件:
Path\FileName_ver1
Path\FileName_ver2
等等。问题是,我不知道如何确定目录中是否存在具有类似命名(减去 _ver#
字符串)的文件,然后解析该名称以找出当前版本号,以及然后使用版本号创建新文件并添加 1。
如果您查看我当前的代码,当前的问题是在进入循环时出现的,告诉我数组超出范围,即使该文件确实存在于目录中。
Dim strPossibleFilename() As String = Directory.GetFiles(savePath, saveName & "_ver*" & saveExt)
Dim intVersionNumber As Integer = 1
For i = 0 To strPossibleFilename.Length - 1
If File.Exists(strPossibleFilename(i)) Then
Dim fileInfo As New FileInfo(strPossibleFilename(i))
Dim fullName As String
Dim strVersionNumber As String
fullName = fileInfo.FullName
Dim versionPosition As Integer = fullName.IndexOf("_ver")
Dim dotPosition As Integer = fullName.IndexOf(".")
Dim versionCharacterCount As Integer = dotPosition - versionPosition
strVersionNumber = fullName.Substring(versionPosition, versionCharacterCount)
If intVersionNumber < strVersionNumber Then
intVersionNumber = strVersionNumber
End If
End If
Next i
If intVersionNumber > 1 Then
saveLocation = savePath & saveName & "_ver" & intVersionNumber + 1 & saveExt
fstr = New FileStream(saveLocation, FileMode.CreateNew, FileAccess.ReadWrite)
fstr.Write(inBuf, 0, bytesRead)
Else
saveLocation = savePath & saveName & "_ver1" & saveExt
fstr = New FileStream(saveLocation, FileMode.CreateNew, FileAccess.ReadWrite)
fstr.Write(inBuf, 0, bytesRead)
End If
附注所有其他功能都有效,就编写和所有内容而言,我在代码中的多个位置执行此操作,包括在文件名已经存在时将其他不同的字符串分配给文件名...... 如果您需要更多信息,请告诉我。
编辑: 根据给出的答案做了一些更改,现在它正在查找文件,但这带来了一个新问题...所以我无法弄清楚如何仅获取“_ver”之后的数字以将其分配给 intVersionNumber ..有什么想法吗?
编辑2: 好的,为了解决这个问题,我添加了:
Dim strVersionString As String
并添加了一些其他内容,因此现在 for 循环如下所示:
For i = 0 To strPossibleFilename.Length - 1
If File.Exists(strPossibleFilename(i)) Then
Dim fileInfo As New FileInfo(strPossibleFilename(i))
Dim fullName As String
Dim strVersionString As String
Dim strVersionNumber As String
fullName = fileInfo.FullName
Dim versionPosition As Integer = fullName.IndexOf("_ver")
Dim dotPosition As Integer = fullName.IndexOf(".")
Dim versionCharacterCount As Integer = dotPosition - versionPosition
strVersionString = fullName.Substring(versionPosition, versionCharacterCount)
Dim rPosition As Integer = strVersionString.IndexOf("r") + 1
strVersionNumber = strVersionString.Substring(rPosition, strVersionString.Length - rPosition)
If intVersionNumber < strVersionNumber Then
intVersionNumber = strVersionNumber
End If
End If
Next i
现在它可以工作了:D 感谢您的帮助!
最佳答案
你做得对,我对这行有一个潜在的怀疑
For i = 0 To strPossibleFilename.Length
更改为
For i = 0 To strPossibleFilename.Length -1
然后除非你亲吻了比尔盖茨的女儿而他生气了,否则应该会成功!
关于arrays - VB.NET 检查现有文件并为该名称分配新的版本号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16862807/