2012-02-24 87 views
2

我試圖運行一個事件,它將搜索給定目錄中的不同文件。目標是讓它搜索以「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 

回答

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() 
+0

這正是我所需要的。非常感謝! – 2012-02-24 15:17:19