2010-08-10 27 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) 

有關創建自己的功能和潛艇的最好的部分是控制我不會進入它,因爲這將是題外話,但你可以檢查,以確保在寫入文件之前,文本框首先有文本。這將保護文件的完整性。

希望這會有所幫助! 理查德網站。