簡體   English   中英

C#StreamWriter無法將類型隱式轉換為字符串到SYSTEMS.IO

[英]C# StreamWriter cannot implicitly convert type to string to SYSTEMS.IO

我需要使用StreamWriter寫入/存儲用戶輸入的信息。 我已經用下面的代碼來工作了。

現在,我需要使其寫入用戶名字的文件,並將信息存儲在此文件中。

隱藏展開復制代碼

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

錯誤CS0165使用未分配的局部變量'sName'FUNCOCO2

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

而且這似乎也不起作用。

對於代碼的第一部分,您嘗試在將值分配給sName之前打開流寫入器。 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: ");

                }

            }

編輯:加號,整個',',而不是流式編寫器開頭的'+'。 我想念那明顯的東西。

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,因為...多余的逗號正在更改您真正要使用的構造函數,該多余的逗號將“ .txt”轉換為所需的無效編碼。

按照錯誤消息進行操作(如果雙擊它們,它們將指向特定的行號),讀取錯誤,然后更正錯誤。


錯誤CS0165使用未分配的局部變量'sName'FUNCOCO2

在流sName中使用sName之前,您永遠不會定義和分配它。 如果要為每個用戶創建1個文件,則需要更改邏輯以反映該邏輯,並在循環內而不是循環外創建一個新的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 */ }
}

您可以執行以下操作:

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

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM