2010-08-10 26 views
0

我是Visual Basic.NET的新手,我只是在玩弄它而已。我有一本书告诉我如何从文件中读取,但不知道如何通过点击按钮来写入文件。我只有一个按钮和一个名为fullNameBox的文本框。当我点击按钮时,它会给我一个未处理的异常错误。这里是我的代码:在Visual basic中按下按钮

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

什么是例外?它是否发生在点击的第一个实例上? – shahkalpesh 2010-08-10 05:05:57

+0

好吧,我发现它正在创建文件,它只是不写任何东西 – shinjuo 2010-08-10 05:16:33

+0

就像我说的,跟踪它的最简单方法是逐步完成它。 fullNameBox实际上是一个有效的文本框吗?你有没有尝试只写文本,没有fullNameBox?逐步检查你的变量。 – cincodenada 2010-08-10 05:42:00

回答

1

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

+0

我改变了它,但它仍然没有工作。该程序给了我没有错误,直到我点击按钮,然后它给了我未处理的异常错误 – shinjuo 2010-08-10 05:12:06

+0

您是否尝试过在函数中放置一个断点,然后逐步查看导致该问题的线? “未处理的异常”不是一个非常有用的错误,它只是意味着你没有考虑到的错误。通过它应该给你更多的信息。 – cincodenada 2010-08-10 05:16:38

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。 随时随地使用代码。 顺便欣赏
你的代码中的问题是,当你完成使用它的时候你必须关闭文件流,这样做会释放任何资源,比如套接字和文件句柄。

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) 

如果您想了解追加代码

  • 的一部分通过设置附加=真正的你允许应用程序在文件末尾写入文本,而文本中的其余部分已保留在文件中。

  • 通过设置追加=假,你会被删除,并用新文字

如果你不喜欢写代码的那部分更换所有的文本现有的文件中(虽然它是小的)你可以创建一个子来处理它,但是这种方法会略有不同,只是为了礼节。功能将保持相似。(使用的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() 

可以采取这样的步骤进一步以及。如果您想创建更多advabced 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) 

有关创建自己的功能和潜艇的最好的部分是控制我不会进入它,因为这将是题外话,但你可以检查,以确保在写入文件之前,文本框首先有文本。这将保护文件的完整性。

希望这会有所帮助! 理查德网站。