2017-08-07 96 views
0

我遇到了一个问题,我有一个正在处理的程序,我必须能够依次读取多个.txt文件来更新名为words()的字符串数组。主要问题是我上传的第一个文件进入files()字符串数组,当我运行拖放事件数组已满时,不会让我上传第二个。在成功上传后,如何重置files()阵列。使用StreamReader读取.txt文件

示例代码:

Dim words(7) As String 
Dim i As Integer = 0 
Public Sub frmMain_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop 

    Dim word As String = "" 
    Try 
     Dim files() As String = e.Data.GetData(DataFormats.FileDrop) 

     For Each path In files 

      MsgBox(path) 
      Dim sr As New StreamReader(path) 

      Do Until sr.Peek = -1 
       word = sr.ReadLine() 

       words(i) = word 

       frmDefaultkWh.lbDefaultkWh.Items.Add(cbAppliances.Items(i) + " = " + words(i)) 
       i = i + 1 

      Loop 


     Next 
     GetPower() 
    Catch ex As Exception 

     'MessageBox.Show(ex.ToString()) 

    End Try 

End Sub 
Private Sub frmMain_DragEnter(sender As Object, e As DragEventArgs) Handles MyBase.DragEnter 

    If e.Data.GetDataPresent(DataFormats.FileDrop) Then 

     e.Effect = DragDropEffects.Copy 

    End If 


End Sub 
+0

请澄清你的意思是_“full”_以及_ ** exact ** _问题是什么。该数组不能为“全部”,因为每次引发MyBase.DragDrop时都会重新声明它。是不可能的。 –

+0

当我拖动第二个文件来更新'words()'字符串数组时,我得到一个System.IndexOutOfRangeException,那么数组不会更新。如果它不是'file()'数组。那么在下一个文件上传后,如何从'words()'数组中删除这些值呢? – Ingelbert

+0

看起来'words'不应该是一个数组,而是一个[**'List(Of T)'**](https://msdn.microsoft.com/en-us/library/6sh2ey19(v = vs.110).aspx),因为你需要一个动态大小的集合(你永远不会知道你会找到多少单词)。调用'yourList.Add()'将新项目添加到列表中,'yourList.Clear()'删除所有项目。 –

回答

1

我相信这是因为你不进行重置我,这意味着最终我增加了这仅仅是大小7,你的话的范围()阵列的其中由如果其中一个文件的行数超过7行,方式也会引发错误。

For Each path In files 
      i = 0 'reset counter 

      MsgBox(path) 
      Dim sr As New StreamReader(path) 

      Do Until sr.Peek = -1 
       word = sr.ReadLine() 

       words(i) = word 

       frmDefaultkWh.lbDefaultkWh.Items.Add(cbAppliances.Items(i) + " = " +  words(i)) 
       i = i + 1 

      Loop 

     Next 
+0

谢谢你的修复。我尝试过,但我认为我把它放在了错误的地方。 – Ingelbert