我正在学习C#并打了一道墙,表明我显然遗漏了一些重要的东西。这一行:
var objWriter = new System.IO.StreamWriter(fileName, False);
在下面的代码中会导致错误 - 字符串变量fileName无法转换为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();
答案 0 :(得分:3)
修正:
将False
替换为false
。
说明:
Here是StreamWriter具有的构造函数列表。请注意,它需要Stream
和Encoding
,或String
和Boolean
。
由于C#区分大小写,它会尝试在代码中的某处查找名为False的对象,这解释了您的第一个问题(当前上下文中不存在False)。但是False是一个对象,而不是布尔值,所以编译器假定fileName是Stream类型(以适应签名),但是,它不知道如何将字符串转换为Stream,因此第二个错误。
答案 1 :(得分:1)
你没有使用你的代码并用 f 替换 F
替换此
string fileName = myDocs + "'\'Test.txt";
用这个
string fileName = myDocs + @"\Test.txt";
答案 2 :(得分: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
静态方法创建完整路径。处理\
或\\
也会有效,但使用已创建的方法会更漂亮。
第二件事是在IDisposable
块内创建using
对象总是好的。在您的情况下,using
将在使用块范围结束时关闭您的流。
另一个注意事项是,在要使用变量的地方声明变量总是更好。在这种情况下,"Hi there!"
字符串直接在使用地点创建。这是我们应该遵守的良好做法之一。请查看that链接。