向数组添加值

时间:2012-02-24 15:04:31

标签: vb.net

我正在尝试运行一个事件,该事件将搜索给定目录中的不同文件。目标是让它搜索所有以“SP_”开头的文件,这些文件是包含存储过程的.sql文件。然后,我想将这些过程的全文添加到稍后要使用的数组中。这在运行时导致错误,我认为是因为'FullProcedureArray()',我试图加载的字符串数组没有定义的边界。当我将其声明为'FullProcedureArray(7)'或其他一些值时,它似乎运行正常。但我不想为'FullProcedureArray'硬编码边界;我宁愿让它由文件夹中的文件数量来定义。

我的问题:有没有办法声明'FullProcedureArray'而不必给它一个绝对值?我可能只是遗漏了一些非常明显的东西,但过去我没有使用过这种类型的阵列。在此先感谢您的帮助。

    Dim AppDataLocation As String = "C:\Files\TestFiles\"
    Dim ProcedureArray As String()
    Dim ProcedureText As String
    Dim FullProcedureArray() As String

    Dim sourceDirectoryInfo As New System.IO.DirectoryInfo(AppDataLocation)

    Dim fileSystemInfo As System.IO.FileSystemInfo
    Dim i As Integer = 0
    For Each fileSystemInfo In sourceDirectoryInfo.GetFileSystemInfos
        If (fileSystemInfo.Name.Contains("SP_")) Then
            ProcedureArray = System.IO.File.ReadAllLines(AppDataLocation & fileSystemInfo.Name)
            ProcedureText = Join(ProcedureArray, "")
            FullProcedureArray.SetValue(ProcedureText, i)
            i = (i + 1)
        End If
    Next

2 个答案:

答案 0 :(得分:8)

数组按定义具有固定的上限。如果您不想要固定的上限,请不要使用数组。例如,使用List(Of String)代替:

Dim AppDataLocation As String = "C:\Files\TestFiles\" 
Dim ProcedureList As New List(Of String)

Dim sourceDirectoryInfo As New System.IO.DirectoryInfo(AppDataLocation) 

For Each fileSystemInfo As System.IO.FileSystemInfo In sourceDirectoryInfo.GetFileSystemInfos 
    If (fileSystemInfo.Name.Contains("SP_")) Then 
        Dim ProcedureText As String = _
            System.IO.File.ReadAllText(AppDataLocation & fileSystemInfo.Name) 
        ProcedureList.Add(ProcedureText)
    End If 
Next 

如果由于某种原因,您之后仍然需要将结果作为数组,只需列表转换为数组:

Dim myArray() As String = ProcedureList.ToArray()

答案 1 :(得分:0)

如果您不想为数组指定大小或想要在运行时更改,可以使用“Redim Preserve” http://msdn.microsoft.com/en-us/library/w8k3cys2%28v=vs.71%29.aspx