2017-09-12 67 views
-1

我正在学习C#,并碰壁,显示我明显缺少重要的东西。行:将信息保存到C#中的文本文件#

var objWriter = new System.IO.StreamWriter(fileName, False); 

在下面的代码会导致错误 - 字符串变量文件名不能被转换为System.IO.Stream和False不会在当前上下文中存在。为什么?

string message = "Hi There!"; 
string myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
string fileName = myDocs + "'\'Test.txt"; 

if (!System.IO.File.Exists(fileName)) 
{ 
    System.IO.File.Create(fileName).Dispose(); 
} 
var objWriter = new System.IO.StreamWriter(fileName, False); 
objWriter.Write(message); 
Console.WriteLine("Message Saved"); 
objWriter.Close(); 
+7

c#区分大小写,所以它是'false',而不是'False' – Kolichikov

+1

Arghhhhhhh。它的假,而不是假 – Rich

+4

我建议使用'using'模式,所以你不能忘记'.Close()'你的'StreamWriter' https://stackoverflow.com/questions/513672/disposable-using-pattern – martijnn2008

回答

3

修复: 与false更换False

说明: Here是StreamWriter具有的构造函数的列表。请注意,它要么需要StreamEncoding,要么需要StringBoolean。由于C#区分大小写,因此它会尝试在代码中某处寻找名为False的对象,这解释了您的第一个问题(False在当前上下文中不存在)。但False是一个对象,而不是布尔型,所以编译器假定fileName是Stream类型(以符合签名),但是,它不知道如何将字符串转换为Stream,因此第二个错误。

1

特殊照顾\ isn't在给定的代码工作,并更换˚F ALSE与˚F ALSE

替换此

string fileName = myDocs + "'\'Test.txt"; 

与此

string fileName = myDocs + @"\Test.txt"; 
+0

斑点!我想这将是我的下一个问题。所以上涨了。非常感谢 – Rich

0

的代码我建议

var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Test.txt"); 

using (var fs = new StreamWriter(path)) 
{ 
    fs.Write("Hi there!"); 
} 

Console.WriteLine("Message Saved"); 

首先请使用Path.Combine静态方法创建完整路径。处理\\\也可以,但使用已经创建的方法会更漂亮。

第二件事是在using块内创建IDisposable对象总是很好。在你的情况下,using将在使用块范围结束时关闭你的流。

另一种说法是,最好在要使用它的地方声明变量。在这种情况下,"Hi there!"字符串是在使用地点直接创建的。这是我们应该服从的良好做法之一。请看that链接。

+0

我想你应该解释为什么你建议你的代码片段,你建议让你的答案投票。 – martijnn2008

+0

@ martijnn2008对不起,不知道你的意思。我对Floarian3007进行了投票,他明智地发现我弄乱了我的连接。我真的很喜欢rraszewski的建议,因为它为我打开了一些有趣的研究 – Rich

+0

我想你会需要using.System.IO;使这个解决方案工作 – Rich

相关问题