好吧,过去几个小时这个人一直在逼我翻墙,我觉得我几乎可以尝到胜利的滋味,但我被困住了。
我正在根据用户提供的要求将文件写入目录,这个特定部分处理Version Number
为新文件分配一个新文件。所以基本上,这会使用以下命名约定创建新文件:
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
PS所有其他功能都有效,就写作和一切而言,我在我的代码中的多个位置执行此操作,包括在文件名已经存在时将其他不同的字符串分配给文件名......如果您需要更多信息,请告诉我信息。
编辑: 根据给出的答案进行了一些更改,现在它正在查找文件,但这带来了一个新问题......所以我无法弄清楚如何只获取“_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 感谢您的所有帮助!