Visual Studio 使用循环重命名目录中的文件并将其替换为文本框中的文本

Visual Studio rename files on a directory with cycle for and substitute it with text from a textbox

我需要循环方面的帮助,当程序启动时应该重命名所选目录上的文件,但它没有。

这是代码:

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        FolderBrowserDialog1.ShowDialog()
        Label4.Text = FolderBrowserDialog1.SelectedPath
        Dim counter = FolderBrowserDialog1.SelectedPath
        Label5.Text = counter.Count
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim basedir As String = FolderBrowserDialog1.SelectedPath
        For counter As Integer = 0 To Int(Label5.Text)
            My.Computer.FileSystem.RenameFile(basedir, TextBox1.Text + "x")
        Next
    End Sub
End Class

首先,FolderBrowserDialog1.SelectedPath returns一个普通的字符串。调用 SelectedPath.Count 不会 给出目录中有多少文件,但 字符串路径由 .[= 组成的字符数29=]

其次,调用 RenameFile(basedir, ...) 不会执行任何操作,因为 basedir 指向单个目录 - 而不是 目录中的文件。

为了获得正确的文件数并遍历文件名,您必须使用类似 Directory.GetFiles(basedir).

的名称
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    FolderBrowserDialog1.ShowDialog()
    Label4.Text = FolderBrowserDialog1.SelectedPath
    Label5.Text = Directory.GetFiles(FolderBrowserDialog1.SelectedPath).Count
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim basedir As String = FolderBrowserDialog1.SelectedPath
    Dim Files As String() = Directory.GetFiles(basedir) 'Declare an array that holds all file paths.
    For counter As Integer = 0 To Files.Length - 1 'Minus one is important here, so that you won't get a "IndexOutOfRangeException".
        My.Computer.FileSystem.RenameFile(Files(counter), TextBox1.Text & counter)
    Next
End Sub

Files(counter) 表示它当前所在的文件。如果 counter = 0Files(counter) 将是数组中的第一个文件路径,依此类推。

我不明白的一件事是为什么你给新文件起你在 TextBox1x 中输入的名称。您目前正在为该目录中的 每个 文件指定完全相同的名称(这是不可能的)。您能告诉我您真正想将它们重命名为什么吗?

与此同时,我将 x 替换为 counter。这会将它们重命名为 <whatever is in TextBox1>0<whatever is in TextBox1>1 等。


最后一件事,您可能已经注意到,我在 RenameFile 的第二个参数中放置了和号 (&) 而不是加号 (+)。使用 & 符号是连接字符串的推荐方式,因为加号在某些情况下可能会导致异常。


编辑:

要保留文件的扩展名,您只需将其解压缩,然后将其添加到新名称中:

For counter As Integer = 0 To Files.Length - 1
    Dim FileExtension As String = Path.GetExtension(Files(counter)) 'Keeping the extension.
    My.Computer.FileSystem.RenameFile(Files(counter), TextBox1.Text & counter & FileExtension)
Next