保存之前File.Exists不会在目录中的现有文件中添加文件号

时间:2019-02-26 16:54:07

标签: vb.net save file-exists

我正在尝试检查文件是否存在于保存应用程序的目录中,如果存在,请在-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无法识别此文件已存在,我该如何解决?

1 个答案:

答案 0 :(得分:0)

您的代码中存在逻辑问题。您将继续修改相同的变量并不断构建新名称。
例如。假设最初有一个名为“ 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)