将信息保存到C#中的文本文件

时间:2017-09-12 19:02:35

标签: c# streamwriter

我正在学习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();

3 个答案:

答案 0 :(得分:3)

修正: 将False替换为false

说明: Here是StreamWriter具有的构造函数列表。请注意,它需要StreamEncoding,或StringBoolean

由于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链接。