我正在尝试读取我用一个单独的程序成功编写的.txt文件,但我一直在停止程序(也就是说没有输入/输出,就像它有一个无限循环或其他东西)。我收到了消息" A",但没有其他人。
我在这样的网站上看到很多线程列出了从文件中读取的各种创造性方法,但我发现的每个指南都要我更改Msgbox A和Msgbox D之间的代码。他们都没有改变结果,所以我开始认为问题实际上与我指出文件的位置有关。有一个代码(与Dim objReader As New System.IO.TextReader(FileLoc)
有关),但当我要求读取文件时,我得到了文件的地址。这就是为什么我怀疑我指向.txt错误的原因。有一个问题......
如果我做的不对,我完全不知道如何做到这一点。
我最后附上了代码片段(每一行无关数据都被删除了。)
如果重要,实际节目的位置在" G01-Cartography"夹。
Private Sub GameMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadMap("Map_Cygnus.txt")
End Sub
Private Sub LoadMap(FileLoc As String)
FileLoc = "C:\Users\Adam\Documents\Visual Studio 2013\Projects\G01-Cartography\Maps\" + FileLoc
MsgBox("A")
Using File As New StreamReader(FileLoc)
MsgBox("B")
Dim WholeMap = File.ReadLine()
MsgBox("C")
End Using
MsgBox("D")
End Sub
答案 0 :(得分:1)
根据MSDN,您似乎正在使用正确的方法/对象。 您的代码在新的VB控制台应用程序(.net 4.5)中运行
MSGBOX采用不同的方法是使用Debug.WriteLine或Console.WriteLine。
WholeMap
无所作为
MsgBox("C")
改为Debug.WriteLine("Read " + WholeMap)
答案 1 :(得分:1)
运行它会在调试器中显示什么?你能在记事本中打开Map_Cygnus.txt文件吗?在第一行设置断点并运行程序以查看正在发生的事情。
Private BaseDirectory As String = "C:\Users\Adam\Documents\Visual Studio 2013\Projects\G01-Cartography\Maps\"
Private Sub GameMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim WholeMap = File.ReadAllText(Path.Combine(BaseDirectory, "Map_Cygnus.txt"))
Debug.Print("Size Of Map: {0}", WholeMap.Length)
End Sub
答案 2 :(得分:0)
我有一些建议。首先,使用Option Strict On
,它可以帮助您避免头痛。
打开文件的代码是正确的。除了避免使用MsgBox()
进行调试而是设置断点或使用Debug.WriteLine()
之外,请将子例程包装在Try...Catch
例外中。
Private Sub GameMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadMap("Map_Cygnus.txt")
End Sub
Private Sub LoadMap(FileLoc As String)
Try
FileLoc = "C:\Users\Adam\Documents\Visual Studio 2013\Projects\G01-Cartography\Maps\" + FileLoc
MsgBox("A")
Using File As New StreamReader(FileLoc)
MsgBox("B")
Dim WholeMap = File.ReadLine() 'dimming a variable inside a block like this means the variable only has scope while inside the block
MsgBox("C")
End Using
MsgBox("D")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
请注意,您通常应该只捕获您期望的任何异常,但我通常会在调试此类内容时捕获所有内容。
我还想指出,您只是将文件中的一行读入变量WholeMap
。一旦命中End Using
行,该变量就会失去范围,从而丢失刚从文件中读取的行。我假设你有这样的代码,因为它似乎给你带来了阅读麻烦,但我想我还是会指出它。
Public Class GameMain
Private WholeMap As String = ""
Private Sub GameMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadMap("Map_Cygnus.txt")
End Sub
Private Sub LoadMap(FileLoc As String)
Try
FileLoc = "C:\Users\Adam\Documents\Visual Studio 2013\Projects\G01-Cartography\Maps\" + FileLoc
Using File As New StreamReader(FileLoc)
WholeMap = File.ReadLine() 'dimming the variable above will give all of your subs inside class Form1 access to the contents of it (note that I've removed the Dim command here)
End Using
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class