arrays - VB.NET 检查现有文件并为该名称分配新的版本号?

标签 arrays vb.net version-control save filenames

好吧,在过去的几个小时里,这个问题一直让我陷入困境,我觉得我几乎可以尝到胜利的滋味,但我被困住了。

我正在根据用户提供的要求将文件写入目录,此特定部分涉及为新文件分配新的版本号。基本上,这使用以下命名约定创建新文件:

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/

相关文章:

javascript - 限制特定大小的文件上传

.net - 将字符串解析为整数(无论 hell 还是高水位)

c++ - 使用 boost - 将它放在源代码管理中还是让任何开发人员自己安装?

javascript - 如何在 Angular 中加载嵌套数组?

java - 使用ArrayList实现循环队列

c# - 在 Visual Basic(而不是 C#)中访问属性

git - 如何将简单的非源代码控制的项目备份转换为版本化的 git 存储库?

version-control - 从 RTC Jazz 导出版本控制信息和历史记录

python - 如何在numpy数组中查找切片对象

javascript - 未捕获的类型错误 : Cannot read property '0' of undefined