2016-02-27 15 views
0

我需要關於循環的幫助,在程序啓動時應該重命名所選目錄上的文件,但它不會。Visual Studio重新命名帶有循環的目錄中的文件,並用文本框中的文本替換它

這是代碼:

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 

回答

0

首先,FolderBrowserDialog1.SelectedPath返回一個正常的字符串。調用SelectedPath.Count不會給你目錄中有多少個文件,但字符串路徑中包含多少個字符

其次,調用RenameFile(basedir, ...)不會做任何事情,因爲basedir指向一個目錄 - 在目錄中的文件。

爲了獲得正確的文件數量,AND重複遍歷文件名,你必須使用類似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。您目前正在給該目錄中的每個文件提供完全相同的名稱(這是不可能的)。你能告訴我你真的想要重命名嗎?

與此同時,我用counter替換了x。這會將它們重命名爲<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 
+0

對不起,我沒有說在此之前,無論如何,這個程序可以幫助我爲媒體中心重命名文件,例如1 <在季節x的文本框中編號,另一個1 <本集編號。現在我有另一個問題可以保持文件的擴展名? – Axel

+0

@Axel:是的,這是可能的。看我的編輯。 –