我是Visual Basic.NET的新手,我只是在玩它。我有一本书告诉我如何从文件中读取,而不是如何通过单击按钮来写入文件。我只有一个按钮和一个名为fullNameBox的文本框。当我单击按钮时,它会给出一个未处理的异常错误。这是我的代码:
Public Class Form1
Sub outputFile()
Dim oWrite As System.IO.StreamWriter
oWrite = System.IO.File.CreateText("C:\sample.txt")
oWrite.WriteLine(fullNameBox.Text)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
outputFile()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
End Class
答案 0 :(得分:1)
您是否尝试单步执行应用程序以查看错误的位置?快速浏览一下,看起来您可能需要在第四行使用System.IO.File(oWrite = IO.File ...)而不仅仅是IO,但我还没有尝试过运行它。
答案 1 :(得分:0)
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SaveFileDialog1.FileName = ""
SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
SaveFileDialog1.ShowDialog()
If SaveFileDialog1.FileName.Trim.Length <> 0 Then
Dim fs As New FileStream(SaveFileDialog1.FileName.Trim, FileMode.Create)
Dim sr As New StreamWriter(fs)
sr.Write(TextBox1.Text)
fs.Flush()
sr.Close()
fs.Close()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
OpenFileDialog1.FileName = ""
OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.FileName.Trim.Length <> 0 Then
Dim fs As New FileStream(OpenFileDialog1.FileName.Trim, FileMode.Open)
Dim sw As New StreamReader(fs)
TextBox1.Text = sw.ReadToEnd
fs.Flush()
sw.Close()
fs.Close()
End If
End Sub
End Class
如果你愿意,这是一个完整的功能程序,你只需要拖放一个文本框,openfiledialog和一个savefiledialog。
随意玩代码。
享受
顺便说一下,你的代码中的问题是当你完成使用它时你“必须”关闭文件流,这样做会释放任何资源,如套接字和文件句柄。
答案 2 :(得分:0)
.net框架是一个非常强大的框架。以同样的方式(然而)它为简单的任务提供了简单方便的方法。大多数人倾向于使事情复杂化以显示知识。但是更少的代码=更少的处理=更快和更有效的应用(有时),因此大的上述方法可能不合适。除此之外,上面提到的方法最好是作为子函数写入,或者如果返回某个函数则更好。
My.Computer.FileSystem.WriteAllText("File As String", "TextAsString", Append as Boolean)
一般示例
My.Computer.FileSystem.WriteAllText("C:\text.text", "this is what I would like to add", False)
这是我想添加的内容
也可以更改为字段的当前文本。
所以更强大的特定示例
My.Computer.FileSystem.WriteAllText("C:\text.text", fullNameBox.text, True)
如果您想了解代码的追加部分
通过设置append = true,您允许应用程序在文件末尾写入文本,保留文件中已有的其余文本。
通过设置append = false,您将删除并用新文本替换现有文件中的所有文本
如果你不想编写代码的那一部分(虽然它很小),你可以创建一个子来处理它,但是这种方法会略有不同,只是为了礼仪。功能将保持相似。 (使用 StreamWriter )
Private Sub WriteText()
Dim objWriter As New System.IO.StreamWriter("file.txt", append as boolean)
objWriter.WriteLine(textboxname.Text)
objWriter.Close()
End Sub
具体示例
Private Sub WriteText()
Dim objWriter As New System.IO.StreamWriter("file.txt", False)
objWriter.WriteLine(fullnamebox.Text)
objWriter.Close()
End Sub
然后在button_click事件调用下:
writetext()
您也可以将此步骤进一步。如果您想创建一个更高级的Sub来处理任何文本框和文件。
让我们假设您计划为每个文件分配多个单独的文件和多个字段(尽管有一个 MUCH 更清洁更优雅的方法),您可以创建一个函数。 {我将尽可能详尽地解释该函数背后的概念}
下面的是针对您的上述请求的更高级的子演示
Private Sub WriteText(Filename As String, app As Boolean, text As String)
Dim objWriter As New System.IO.StreamWriter(Filename, app)
objWriter.WriteLine(text)
objWriter.Close()
End Sub
这样做可以让我们(在同一个表格上 - 如果你需要全局我们可以再讨论那个,它并不复杂得多)调用函数并根据需要输入信息。 / em>的
子使用 - &gt;一般样本
WriteText(Filename As String, app As Boolean)
子使用 - &gt;具体样本
WriteText("C:\text.txt, False, fullnamebox.text)
但是关于这种方法最好的部分是你可以根据需要改变它。 假设您有两个按钮*和**两个框,您可以让第一个按钮的button_event触发上面的代码,第二个按钮触发不同的代码。
示例强>
WriteText("C:\text2.txt, False, halfnamebox.text)
关于创建自己的函数和子函数的最好的部分是控制我不会进入它,因为它将不在主题,但您可以检查以确保文本框之前有文本写文件。这将保护文件的完整性。
希望这有帮助! Richard Sites。