0

我是 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
4

3 回答 3

1

您是否尝试过单步执行您的应用程序以查看错误在哪里?快速浏览一下,您可能需要在第四行使用 System.IO.File (oWrite = IO.File...) 而不仅仅是 IO,但我没有尝试运行它。

于 2010-08-10T05:06:45.517 回答
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。随意玩弄代码。顺便
说一句,您的代码中的问题是您在使用完文件流后“必须”关闭它,这样做会释放任何资源,例如套接字和文件句柄。

于 2012-04-29T20:15:32.850 回答
0

.net 框架是一个非常强大的框架。以同样的方式(但是)它为简单的任务提供了简单方便的方法。大多数人倾向于使事情复杂化以展示知识。但是更少的代码=更少的处理=更快和更高效的应用程序(有时)所以上面的大方法可能不适合。除此之外,上面提到的方法最好写成一个 sub 或者如果返回一些东西然后是一个函数。

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 来处理任何文本框和文件。

假设您计划为每个文件拥有多个单独的文件和多个字段(尽管有一个清洁更优雅的方法),您可以创建一个函数。{我将在这个例子中尽可能彻底地解释函数背后的概念}

下面是针对您的上述请求的更高级的子演示

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

它的作用是让我们(在同一个表单上——如果你需要它全局,我们可以在另一次讨论,它一点也不复杂)调用函数并根据需要输入信息。

子使用 -> 通用示例

WriteText(Filename As String, app As Boolean)

子使用 -> 特定样本

WriteText("C:\text.txt, False, fullnamebox.text)

但是这种方法最好的部分是您可以根据需要将其更改为任何内容。假设您有两个按钮* 和**两个框,您可以让第一个按钮的 button_event 触发上述代码,而第二个按钮触发不同的代码。

例子

WriteText("C:\text2.txt, False, halfnamebox.text)

创建自己的函数和子函数的最佳部分是Control我不会进入它,因为它会偏离主题,但您可以在编写文件之前先检查以确保文本框有文本。这将保护文件的完整性。

希望这可以帮助!理查德站点。

于 2013-02-11T00:41:11.423 回答