我正在尝试检查文件是否存在于保存应用程序的目录中,如果存在,则在末尾添加一个数字-1,-2。 -3 - 基于是否已存在具有相同名称的文件。我的代码如下:
Dim FileName, FilePath As String
Dim FileNumber As Integer
FileName = ProjectName
FilePath = Path.Combine(CurrentDirectory, FileName)
If File.Exists(FilePath) = True Then
Do While File.Exists(FilePath)
FileNumber = FileNumber + 1
FileName = FileName & "-" & FileNumber
FilePath = Path.Combine(CurrentDirectory, FileName)
Loop
End If
NewWorkbook.SaveAs(FilePath)
当我运行此代码并且文件第一次保存时,它按预期工作但如果我尝试第二次保存具有相同名称的文件,则没有添加迭代的FileNumber,因此文件名保持不变,如果不替换原始文件,则无法保存。
为什么File.Exists没有意识到该文件已经存在,我该如何解决这个问题?
您的代码中存在逻辑问题。您继续修改相同的变量并构建连续的新名称。 例如。假设最初有一个名为“Project.vb”的文件。在循环内部的第一次迭代中,检查名为“Project.vb1”的文件,如果循环在第二次迭代时继续,则检查名为“Project.vb12”的文件,依此类推。
一种更正确的方法可能是
Dim FileName, FileWithoutExtension, FileExtension, FilePath As String
Dim FileNumber As Integer = 1
Dim currentDirectory As String = "E:\temp" ' as an example
FileName = "test.txt" ' as an example
FileExtension = Path.GetExtension(FileName)
FileWithoutExtension = Path.GetFileNameWithoutExtension(FileName)
FilePath = Path.Combine(CurrentDirectory, FileName)
' No need of additional if to test file existance.
Do While File.Exists(FilePath)
FileNumber = FileNumber + 1
' Rebuild the Filename part wtih all the info
FileName = FileWithoutExtension & "-" & FileNumber.ToString("D3") + FileExtension
FilePath = Path.Combine(CurrentDirectory, FileName)
Loop
NewWorkbook.SaveAs(FilePath)