2016-12-01 130 views
0

我需要使用StreamWriter写入/存储用户正在输入的信息。我已经得到了以下代码的工作。C#StreamWriter不能隐式地将类型转换为字符串到SYSTEMS.IO

我现在需要让它用用户的名字写一个文件,并将信息存储在那里。

隐藏展开复制代码

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: "); 
     } 
    } 

我似乎无法得到这个工作,并保持未来与这些错误:

参数1:无法从“字符串”转换为 'System.IO.Stream' FUNCOCO2

未分配的局部变量 'SNAME' FUNCOCO2的错误CS0165使用

错误CS1503参数2:无法从“字符串”转换为 “System.Text.Encoding”

我不知道如何解决这个问题。

我改成了这样:

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: "); 
     } 
    } 

这似乎没有任何工作。

+1

'这似乎并没有工作either.' <=请还包括错误消息就像你与你的第一次尝试做。 – Igor

+0

听起来好像你想为每个用户创建一个新文件,但是你只打开一次文件 - 在循环之外。在你原来的“尝试”中,你也错误地在'new StreamWriter(“NewUser”+ sName,“。txt”,true)'中使用了逗号而不是字符串连接。由于构造函数没有这样的重载,所以会出现一些令人困惑的错误。 – Luaan

回答

0

请按照错误消息(如果您双击它们指向特定的行号),请阅读错误,然后纠正错误。未分配的局部变量 'SNAME' FUNCOCO2


错误CS0165使用你从来没有定义和分配在流作家用它sName之前。如果您试图为每个用户创建一个文件,那么您需要更改逻辑以反映该内容,并在循环内而不是在循环外部创建新的Streamwriter。


参数1:无法从 '串' 到 'System.IO.Stream' 转换

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

应该

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

它不接受一个字符串作为第一个参数。


评论谢谢你,我怎么会那么得到的StreamReader来,然后打开该文件?

您需要将循环创建为流写入器之外。

//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

然后'sName'也必须填在_before_这一行上 –

+0

Thanks,How然后我会得到StreamReader然后打开该文件? – Lorna

+0

@Lorna - 请参阅更新 – Igor

0

对于代码的第一部分,您正尝试在为sName分配一个值之前打开一个Streamwriter。 using关键字只是确保在代码退出该部分时正确处理对象,这意味着在这种情况下您不会将文件全部打开。你应该做的是在for循环中打开一个文件。正确的代码是:

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()); 



       //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 
        //open file for writing, in APPEND mode 
        using (StreamWriter sw = new StreamWriter("NewUser" +sName +".txt", true)) 
        { 
         sw.WriteLine(sName); 
         Console.WriteLine(); 
         sw.WriteLine(sSchoolName); 
         Console.WriteLine(); 
         sw.WriteLine(sClassName); 
        } 


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

       } 

      } 

编辑:plus,整个','而不是'+'在streamwriter的开头。我错过了那个显而易见的赞成。

+0

谢谢,我移动它,现在我收到以下错误:参数3:不能从'字符串'转换为'int',不能将字符串转换为系统文本编码,并且不能将字符串转换为Systems.IO.Stream – Lorna

+0

检查什么类型iUserNumber是。另外,请检查iCount的类型。你没有在你提供的代码片段中声明iCount。大多数情况下,当你创建一个for循环时,你在那里声明一个int,比如“for(int iCount = 1; iCount <= IUserNumber; iCount ++) –

0

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

似乎有+ SNAME之后额外的逗号。这逗号应该是一个+以连接3串部分一起

像这样 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' 

错误1,因为“” NEWUSER“+ SNAME”不是一个有效的文件路径,因此不能被流

错误2,因为......不知道,因为我没有看到你在哪里声明SNAME

错误3因为...额外的逗号正在改变你真的想使用构造函数,那多余的逗号转弯”。文本” 转换为无效的所需编码。

0

你可以做这样的事情:

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

您必须按两次Enter才能退出 –

相关问题