2016-12-01 1 views
0

Ich brauche StreamWriter zu schreiben/speichern Informationen, die der Benutzer eingeben. Ich habe das funktioniert mit dem Code unten.C# StreamWriter kann nicht implizit Typ in Zeichenfolge in SYSTEMS.IO konvertieren

Ich muss jetzt machen es eine Datei mit dem Vornamen des Benutzers schreiben, und speichern Sie die Informationen dort.

ausblenden Code kopieren erweitern

case 2: //enter new user 
    //Enter new user information and add them to file 
    Console.Write("Please Enter the number of users you wish to log: "); 

    iUserNumber = Convert.ToInt32(Console.ReadLine()); 

    //open file for writing, in APPEND mode 
    using (StreamWriter sw = new StreamWriter("NewUser" +sName,".txt", true)) 
    { 
     //loop for each user 
     for (iCount = 1; iCount <= iUserNumber; iCount++) 
     { 
      // enter details 
      Console.Write("Please Enter your Name" + iCount + ": "); 
      sName = Console.ReadLine(); 

      Console.Write("Please Enter the Name of your School: "); 
      sSchoolName = Console.ReadLine(); 
      Console.WriteLine(); 

      Console.Write("Please Enter the Name of your Class: "); 
      sClassName = Console.ReadLine(); 

      // write to file 
      sw.WriteLine(sName); 
      Console.WriteLine(); 
      sw.WriteLine(sSchoolName); 
      Console.WriteLine(); 
      sw.WriteLine(sClassName); 

      Console.WriteLine("User data entered: "); 
     } 
    } 

Ich kann nicht scheinen, dies mit diesen Fehlern kommen, zu arbeiten und halten:

Argument 1: kann nicht von ‚string‘ zu konvertieren 'System.IO.Stream' FUNCOCO2

Fehler CS0165 Verwendung von nicht zugewiesenen lokalen variablen 'sName' FUNCOCO2

Fehler CS1503 Argument 2: kann nicht von 'string' zu konvertieren 'System.Text.Encoding'

Ich bin nicht sicher, wie dies zu beheben.

Ich änderte es dazu:

case 2: //enter new user 
    //Enter new user information and add them to file 
    Console.Write("Please Enter the number of users you wish to log: "); 
    iUserNumber = Convert.ToInt32(Console.ReadLine()); 
    //enter first name 
    Console.WriteLine("Please enter your first Name: "); 
    sFirstName = Convert.ToString(Console.ReadLine()); 

    //open file for writing, in APPEND mode 
    using (StreamWriter sw = new StreamWriter(sName)) 
    { 
     //loop for each user 
     for (iCount = 1; iCount <= iUserNumber; iCount++) 
     { 
      // enter details 
      Console.Write("Please Enter your Name" + iCount + ": "); 
      sLastName = Console.ReadLine(); 

      Console.Write("Please Enter the Name of your School: "); 
      sSchoolName = Console.ReadLine(); 
      Console.WriteLine(); 

      Console.Write("Please Enter the Name of your Class: "); 
      sClassName = Console.ReadLine(); 

      // write to file 
      sw.WriteLine(sName); 
      Console.WriteLine(); 
      sw.WriteLine(sSchoolName); 
      Console.WriteLine(); 
      sw.WriteLine(sClassName); 

      Console.WriteLine("User data entered: "); 
     } 
    } 

Und das scheint nicht zu funktionieren.

+1

'Und das scheint nicht either.' zu arbeiten <= bitte auch die Fehlermeldungen wie Sie mit Ihrem ersten Versuch gemacht haben. – Igor

+0

Es klingt, als ob Sie für jeden Benutzer eine neue Datei erstellen möchten, aber Sie öffnen die Datei nur einmal - außerhalb der Schleife. In Ihrem ursprünglichen "Versuch" verwendeten Sie irrtümlicherweise auch ein Komma anstelle einer String-Verkettung in 'new StreamWriter (" NewUser "+ sName,". Txt ", true)'. Da es für den Konstruktor keine solche Überladung gibt, erhalten Sie einige verwirrende Fehler. – Luaan

Antwort

0

Folgen Sie den Fehlermeldungen (sie zeigen auf bestimmte Zeilennummern, wenn Sie darauf doppelklicken), lesen Sie den Fehler und korrigieren Sie den Fehler.


Fehler CS0165 Verwendung von nicht zugewiesenen lokalen Variablen 'sName' FUNCOCO2

Sie definieren nie und weisen sName bevor sie in Ihrem Stream Schriftsteller zu verwenden. Wenn Sie versuchen, eine Datei pro Benutzer zu erstellen, müssen Sie Ihre Logik ändern, um dies zu berücksichtigen, und einen neuen Streamwriter innerhalb der Schleife erstellen, anstatt außerhalb der Schleife.


Argument 1: kann nicht von 'string' in 'System.IO.Stream' konvertieren

new StreamWriter("NewUser" +sName,".txt", true)) 

sollte

new StreamWriter("NewUser" +sName + ".txt", true)) 

die einen String akzeptiert als der 1. Parameter.


Kommentar Danke, Wie würde ich dann Stream bekommen, um dann die Datei zu öffnen?

Sie müssen die Schleife außerhalb der Erstellung des Stream Writer setzen.

//loop for each user 
for (iCount = 1; iCount <= iUserNumber; iCount++) 
{ 
    Console.Write("Please Enter your Name" + iCount + ": "); 
    var sName = Console.ReadLine(); // remove the previous instance you had of sName and make it a scoped variable to the for loop 
    using (StreamWriter sw = new StreamWriter("NewUser" +sName + ".txt", true)) 
    { /*use the streamwriter here */ } 
} 
+0

Und dann' sName' muss auch _before_ diese Zeile gefüllt werden. –

+0

Danke, Wie würde ich dann StreamReader bekommen, um dann diese Datei zu öffnen? – Lorna

+0

@Lorna - siehe Update – Igor

0

Im ersten Abschnitt des Codes versuchen Sie, einen Streamwriter zu öffnen, bevor Sie sName einen Wert zuweisen. Das Schlüsselwort using stellt lediglich sicher, dass das Objekt ordnungsgemäß entsorgt wird, sobald der Code den Abschnitt verlassen hat. Dies bedeutet, dass Sie in diesem Fall keine Dateien öffnen, die überall geöffnet sind. Was Sie tun sollten, ist eine Datei innerhalb der for-Schleife zu öffnen. Der richtige Code wäre:

Edit: plus, das ganze ',' statt '+' in der Eröffnung des Streamwriter. Das habe ich zugunsten des Offensichtlichen vermisst.

+0

Danke, ich habe es verschoben und jetzt bekomme ich die folgenden Fehler: Argument 3: kann nicht von 'string' in 'int' umwandeln, kann String nicht in Systemtextcodierung konvertieren und String in Systems.IO.Stream – Lorna

+0

nicht konvertieren Geben Sie iUserNumber ein. Überprüfen Sie auch, welcher Typ iCount ist. Sie deklarieren iCount nicht in dem Snippet, das Sie angegeben haben. Meistens, wenn Sie eine for-Schleife erstellen, deklarieren Sie ein int, wie "for (int iCount = 1; iCount <= IUserNumber; iCount ++) –

0

using (StreamWriter sw = new StreamWriter("NewUser" +sName,".txt", true))

Es scheint ein zusätzliches Komma direkt nach + sName zu sein. Das Komma sollte a + sind die drei Streicher zusammen

wie solche using (StreamWriter sw = new StreamWriter("NewUser" + sName + ".txt", true))

Argument 1: cannot convert from 'string' to 'System.IO.Stream' FUNCOCO2 

Error CS0165 Use of unassigned local variable 'sName' FUNCOCO2 

Error CS1503 Argument 2: cannot convert from 'string' to 'System.Text.Encoding' 

Fehler 1, weil „“ NewUser „+ sName“ ist ein gültiger Dateipfad nicht zu verketten, kann nicht deshalb ein Strom sein

Fehler 2, weil ... weiß nicht, da ich nicht sehe, wo man sName erklärt

Fehler 3, weil ... das zusätzliche Komma den Konstruktor Ändern Sie wirklich verwenden möchten, dass zusätzliche Komma turns“. txt" in die gewünschte Codierung, die ungültig ist.

0

Sie können etwas tun:

Console.WriteLine("Please enter your first Name: "); 
      String sFirstName = Console.ReadLine(); 
      String information = String.Empty; 
      String append = String.Empty; 

      while (true) 
      { 

       Console.Write("Please Enter your Name: "); 
       information = information + Console.ReadLine() + " "; 

       Console.Write("Please Enter the Name of your School: "); 
       information = information + Console.ReadLine() + " "; 

       if (information.Trim().Equals("")) 
       { 
        break; 
       } 

       Console.Write("Please Enter the Name of your Class: "); 
       information = information + Console.ReadLine() + "\t"; 

       append = append + information; 
       information = String.Empty; 


      } 

      String fileLocation = "C:...\\New Text Document.txt"; 


      using (StreamWriter sw = new StreamWriter(fileLocation)) 
      { 
       // write to file 
       sw.WriteLine(append); 
       Console.WriteLine("User data entered: "); 

      } 
+0

Sie müssen zweimal drücken, um zu beenden –

Verwandte Themen