2015-08-16 6 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

Вы должны увеличивать 'число' как действие * последнего * в цикле, а не первое. Массивы индексируются нулями, поэтому '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 
Смежные вопросы