![](/img/trans.png)
[英]How to fix StreamWriter error “cannot implicitly convert type string to System.IO.StreamWriter”
[英]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.