2010-08-10 5 views
0

Je suis nouveau à Visual Basic.NET et je suis juste en train de jouer avec elle. J'ai un livre qui me dit comment lire à partir d'un fichier mais pas comment écrire dans le fichier en cliquant sur un bouton. Tout ce que j'ai est un bouton et une zone de texte nommée fullNameBox. Lorsque je clique sur le bouton, il me donne une erreur d'exception non gérée. Voici mon code:En appuyant sur un bouton dans 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

Quelle est l'exception? cela se produit-il à la première instance du clic? – shahkalpesh

+0

D'accord, j'ai compris que c'est en train de créer le fichier qu'il n'écrit rien – shinjuo

+0

Comme je l'ai dit, le moyen le plus simple de le suivre est de le parcourir. FullNameBox est-il réellement une zone de texte valide? Avez-vous essayé d'écrire du texte, sans fullNameBox? Passez à travers et vérifiez vos variables. – cincodenada

Répondre

1

Avez-vous essayé de parcourir votre application pour voir où se trouve l'erreur? D'un coup d'œil, il semblerait que vous deviez utiliser System.IO.File sur la quatrième ligne (oWrite = IO.File ...) au lieu de simplement IO, mais je n'ai pas essayé de l'exécuter.

+0

je l'ai changé, mais cela n'a pas fonctionné.Le programme ne me donne aucune erreur jusqu'à ce que je clique sur le bouton puis il me donne l'erreur d'exception non gérée – shinjuo

+0

Avez-vous essayé de mettre un point d'arrêt dans la fonction et ensuite passer à travers pour voir quelle ligne est à l'origine du problème? "Exception non gérée" n'est pas une erreur très utile, cela signifie simplement que quelque chose s'est mal passé et que vous n'avez pas pris en compte. Passer à travers cela devrait vous donner plus d'informations. – cincodenada

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 

c'est un programme fonctionnel complet si vous voulez, il vous suffit de faire glisser tomber une zone de texte, OpenFileDialog, et un SaveFileDialog. ne hésitez pas à jouer avec le code. Au fait, le problème dans votre code est que vous "devez" fermer le flux de fichiers lorsque vous avez fini de l'utiliser, cela libèrera toute ressource telle que les sockets et les descripteurs de fichiers.

0

Le framework .net est un framework très puissant. De la même manière (cependant) il a des méthodes faciles et pratiques pour des tâches simples. La plupart des individus ont tendance à compliquer les choses afin d'afficher les connaissances. Mais moins de code = moins de traitement = application plus rapide et plus efficace (parfois) donc la grande méthode ci-dessus peut ne pas convenir. Parallèlement à cela, la méthode mentionnée ci-dessus serait mieux écrit comme un sous ou si retourner quelque chose, puis une fonction.

My.Computer.FileSystem.WriteAllText("File As String", "TextAsString", Append as Boolean) 

Un général exemple serait

My.Computer.FileSystem.WriteAllText("C:\text.text", "this is what I would like to add", False) 

ce que je voudrais ajouter

peut être changé au texte actuel d'un champ aussi bien.

donc un plus spécifique exemple serait

My.Computer.FileSystem.WriteAllText("C:\text.text", fullNameBox.text, True) 

Si vous souhaitez comprendre le append partie du code

  • En définissant append = true vous permettant à votre application d'écrire le texte à la fin du fichier, en laissant le reste du texte déjà dans le fichier intact.

  • En définissant append = false vous allez enlever et remplacer tout le texte dans le fichier existant avec le nouveau texte

Si vous ne vous sentez pas envie d'écrire cette partie du code (bien qu'il est petit), vous pouvez créer un sous pour le gérer, mais cette méthode serait légèrement différente, juste pour l'étiquette. la fonctionnalité resterait similaire.(L'utilisation StreamWriter)

Private Sub WriteText() 
     Dim objWriter As New System.IO.StreamWriter("file.txt", append as boolean) 
     objWriter.WriteLine(textboxname.Text) 
     objWriter.Close() 
    End Sub 

Le spécifique Exemple serait

Private Sub WriteText() 
     Dim objWriter As New System.IO.StreamWriter("file.txt", False) 
     objWriter.WriteLine(fullnamebox.Text) 
     objWriter.Close() 
    End Sub 

puis sous l'événement Button_Click appel:

writetext() 

Vous pouvez prendre un peu plus ainsi que. Si vous souhaitez créer un Sub plus avancé pour gérer n'importe quelle zone de texte et fichier. Disons que vous prévoyez d'avoir plusieurs fichiers séparés et plusieurs champs pour chaque fichier (bien qu'il existe un MUCH nettoyeur plus élégante méthode), vous pouvez créer une fonction. {je vais vous expliquer le concept derrière la fonction aussi bien que possible pour cet exemple}

ci-dessous est une sous démonstration plus avancée pour votre demande ci-dessus

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 

Ce que cela fait est permet nous (sur la même forme - si vous en avez besoin global nous pouvons discuter qu'une autre fois, ce n'est pas beaucoup plus complexe du tout) appelez la fonction et entrez l'information au besoin.

Sous utilisation -> Exemple général

WriteText(Filename As String, app As Boolean) 

Sub utilisation -> Exemple spécifique

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

Mais la meilleure partie de cette méthode est que vous pouvez changer que pour être quoi que ce soit comme vous en avez besoin. Disons que vous avez Deux boutons * et ** Deux cases vous pouvez avoir le bouton_événement pour le premier bouton déclencher le code ci-dessus et le second bouton déclencher un code différent.

Exemple

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

La meilleure partie de la création de vos propres fonctions et sous-marins sont contrôle Je ne vais pas entrer dedans, car il sera hors sujet, mais vous pouvez vérifier pour être sûr la zone de texte contient du texte avant d'écrire le fichier. Cela protégera l'intégrité des fichiers.

Espérons que cela aide! Richard Sites.

Questions connexes