2015-08-16 44 views
1

我想做一個程序來組織文件夾充滿隨機的東西。我希望它將每種文件類型放入一個描述其內容的文件夾中。我有另一個數組內的文件類型的數組,所以它可以循環。vb.net爲每個循環計數器

它可以移動數組中指定的文件類型,但是當我試圖將每種類型放入單獨的文件夾時,它說數組索引超出了範圍。

它工作正常,如果您將名稱索引替換爲數字,但我無法讓它自動更改它。

這裏是我使用的代碼:

Dim Extensions As Array = {Audio, Video, Image, Document, PlainText, Batch, Powershell, VB, DiskImage, Compressed, Excutable, Model, Code, Web, Registry} 
Dim Names As String() = {"Audio", "Videos", "Pictures", "Documents", "Text Documents", "Batch", "Powershell", "Visual Basic", "DiskImages", "Compressed Files", "Excutables", "3d Models", "Code", "Web", "Registry"} 

    Dim number As Integer = 0 
    For Each type As String() In Extensions 
     number += 1 
     path = path + Names(number) 

     For Each extension As String In type 
      Label2.Text = extension 
      CopyMove(FolderBrowserDialog2.SelectedPath, path, extension, s) 
     Next 

    Next 
+2

您應該將'number'作爲循環中的* last *動作遞增,而不是第一個。數組是零索引的,所以'Names(0)'是列表中的第一項,而不是'Names(1)'。 – Blorgbeard

+0

或者:將數字初始化爲-1而不是0。 –

回答

3

配對陣列像這樣的不良做法。更好地創建一個類,然後使用該類的單個數組或列表:

Public Class FileType 
    Public Property Category As String 
    Public Property Extensions As List(Of String) 
End Class 

Dim Filetypes As New List(Of FileType) From { 
    New FileType() With {Category = "Audio", Extensions = Audio }, 
    New FileType() With {Cateogry = "Video", Extensions = Video } 
    '... 
} 


For Each type As FileType In FileTypes 
    Dim thisPath As String = Path.Combine(path, type.Category) 

    For Each extension As String In type.Extensions 
     Label2.Text = extension ' this label won't update inside the method, but that's another question 
     CopyMove(FolderBrowserDialog2.SelectedPath, thisPath, extension, s) 
    Next 
Next