无法读取文本文件中的多行 vb.net
Unable to read multiple lines in text file vb.net
我不确定我做错了什么我正在尝试读取一个文本文件,其中包含许多文件路径以及文件名和扩展名。我已经设法拆分文件路径和文件名以添加到我的字典,然后将其添加到列表框。
问题是我的代码重复读取同一行。任何人都可以就我出错的地方提出建议。文本文件格式为...
C:\Users\User\Desktop\Musictrack3@01。 Aerosmith & 运行 DMC - 走这条路 (1986).mp3
C:\Users\User\Desktop\Musictrack3@01。 INXS - 今晚我需要你 (1988).mp3
我使用 @ 字符来帮助分隔文件路径和名称。
Dim lines = File.ReadAllLines("tmp.txt")
'read from a file
Dim line As String
Using reader As New StreamReader("tmp.txt")
line = reader.ReadLine()
Dim str = line
Dim split = str.Split("@")
Dim FilePathValue As String
Dim FileNameKey As String
If (split.Count = 2) Then
FilePathValue = split(0).ToString()
FileNameKey = split(1).ToString()
'
End If
' Load items into the music dictionary
For i = 0 To lines.Length - 1 Step 2
MsgBox("Path should not be blank??? = " &
FilePathValue & " File Name = " & FileNameKey)
MusicDictionary.Add(FileNameKey(i), FilePathValue(i))
UpdateTheDictionary()
Next
'Here we need to load the filename into the dropdown items
For Each item In MusicDictionary
'Dim x =
MusicToolStripMenuItem.DropDownItems.Add(item.Key)
'AddHandler x.Click, AddressOf ToolMenuItem_Click
Next
End Using
谢谢
您阅读文件两次:
你把文件读入数组
Dim lines = File.ReadAllLines("tmp.txt")
然后你也开始读一遍,这次是“逐行”的方式,但你只读了第一行:
Using reader As New StreamReader("tmp.txt")
line = reader.ReadLine()
您处理第一行,提取文件名等,然后通过遍历您读取的数组在同一行上重复操作:
For i = 0 To lines.Length - 1 Step 2
希望你能理解你的第一条指令读取文件的所有行,将它们读入内存的一部分中的数组,然后再次读取第一行,将另一个变量放入内存的不同部分,并且这两项数据之间完全没有link。遍历数组不会改变 line
变量的内容(也不会再次执行拆分等)
怎么办?
删除现有的for循环,并将Using替换为For Each line in lines
,并调试结果。要调试,请将光标放在代码的第一行,按 F9 使其变为红色,然后 运行 程序。当第一行上的所有内容都以黄色标记停止时,您可以使用调试菜单上的步骤 Over/Into/Out 命令来检查代码(使用它们的快捷键,更容易)
我不确定我做错了什么我正在尝试读取一个文本文件,其中包含许多文件路径以及文件名和扩展名。我已经设法拆分文件路径和文件名以添加到我的字典,然后将其添加到列表框。
问题是我的代码重复读取同一行。任何人都可以就我出错的地方提出建议。文本文件格式为...
C:\Users\User\Desktop\Musictrack3@01。 Aerosmith & 运行 DMC - 走这条路 (1986).mp3 C:\Users\User\Desktop\Musictrack3@01。 INXS - 今晚我需要你 (1988).mp3
我使用 @ 字符来帮助分隔文件路径和名称。
Dim lines = File.ReadAllLines("tmp.txt")
'read from a file
Dim line As String
Using reader As New StreamReader("tmp.txt")
line = reader.ReadLine()
Dim str = line
Dim split = str.Split("@")
Dim FilePathValue As String
Dim FileNameKey As String
If (split.Count = 2) Then
FilePathValue = split(0).ToString()
FileNameKey = split(1).ToString()
'
End If
' Load items into the music dictionary
For i = 0 To lines.Length - 1 Step 2
MsgBox("Path should not be blank??? = " &
FilePathValue & " File Name = " & FileNameKey)
MusicDictionary.Add(FileNameKey(i), FilePathValue(i))
UpdateTheDictionary()
Next
'Here we need to load the filename into the dropdown items
For Each item In MusicDictionary
'Dim x =
MusicToolStripMenuItem.DropDownItems.Add(item.Key)
'AddHandler x.Click, AddressOf ToolMenuItem_Click
Next
End Using
谢谢
您阅读文件两次:
你把文件读入数组
Dim lines = File.ReadAllLines("tmp.txt")
然后你也开始读一遍,这次是“逐行”的方式,但你只读了第一行:
Using reader As New StreamReader("tmp.txt")
line = reader.ReadLine()
您处理第一行,提取文件名等,然后通过遍历您读取的数组在同一行上重复操作:
For i = 0 To lines.Length - 1 Step 2
希望你能理解你的第一条指令读取文件的所有行,将它们读入内存的一部分中的数组,然后再次读取第一行,将另一个变量放入内存的不同部分,并且这两项数据之间完全没有link。遍历数组不会改变 line
变量的内容(也不会再次执行拆分等)
怎么办?
删除现有的for循环,并将Using替换为For Each line in lines
,并调试结果。要调试,请将光标放在代码的第一行,按 F9 使其变为红色,然后 运行 程序。当第一行上的所有内容都以黄色标记停止时,您可以使用调试菜单上的步骤 Over/Into/Out 命令来检查代码(使用它们的快捷键,更容易)