我正在尝试运行一个事件,它将搜索给定目录中的不同文件.目标是让它搜索所有以"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
Run Code Online (Sandbox Code Playgroud)
根据定义,数组具有固定的上限.如果您不想要固定的上限,请不要使用数组.例如,使用a 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
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因,您之后仍然需要将结果作为数组,只需将列表转换为数组:
Dim myArray() As String = ProcedureList.ToArray()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26067 次 |
| 最近记录: |