文件创建但不能写入其中

时间:2013-08-27 20:42:45

标签: c# visual-studio-2010

我的程序:检查Settings.txt文件。如果文件不存在,请创建文本并自动写入。如果Settings.txt文件已存在,请忽略。不要在现有文件中创建或写入。

我的问题:当文件不存在时,Settings.txt文件会创建,但它是空的。我希望程序在创建文件时写入。谢谢你的帮助。

 private void Form1_Load(object sender, EventArgs e)
    {
        string path = @"C:\Users\Smith\Documents\Visual Studio 2010\Projects\Ver.2\Settings.txt";
        if (!File.Exists(path))
        {
            File.Create(path);
            TextWriter tw = new StreamWriter(path);
            tw.WriteLine("Manual Numbers=");
            tw.WriteLine("");
            tw.WriteLine("Installation Technical Manual: ");
            tw.WriteLine("Performance Manual: ");
            tw.WriteLine("Planned Maintenance Technical Manual: ");
            tw.WriteLine("Service Calibration Manual: ");
            tw.WriteLine("System Information Manual: ");
            tw.WriteLine("");
            tw.Close();
        }
    }

4 个答案:

答案 0 :(得分:14)

试试这个:

    using(FileStream stream = File.Create(path))
    {
        TextWriter tw = new StreamWriter(stream);
        tw.WriteLine("Manual Numbers=");
        tw.WriteLine("");
        tw.WriteLine("Installation Technical Manual: ");
        tw.WriteLine("Performance Manual: ");
        tw.WriteLine("Planned Maintenance Technical Manual: ");
        tw.WriteLine("Service Calibration Manual: ");
        tw.WriteLine("System Information Manual: ");
        tw.WriteLine("");
    }

使用确保即使在写入过程中发生异常,文件流也会被关闭(处置)。

答案 1 :(得分:8)

问题是File.Create返回一个FileStream,因此它使文件保持打开状态。您需要将TextStream与TextWriter一起使用。您还希望在using(...)语句中伪造FileStream或手动调用FileStream上的Dispose(),以确保在您完成处理文件时关闭该文件。

答案 2 :(得分:6)

这就是我认为发生的事情。当我复制并运行你的代码时,抛出了一个异常。这可能是因为您创建文件两次并且在第二次创建文件之前不要关闭它。

作为参考,TextWriter tw = new StreamWriter(path);为您创建文件。您无需致电File.Create

并且在后续运行期间,我认为您没有删除该文件,并且由于该文件已存在,因此永远不会满足if (!File.Exists(path)),并且将跳过整个if语句< / p>

所以这里有多个要点

  • 摆脱File.Create电话
  • 如果你想要覆盖文件,你不应该检查它是否存在,你应该只是覆盖。

答案 3 :(得分:2)

虽然我在很长一段时间后回答,但我想我应该回答

using (TextWriter tw = new StreamWriter(path))
{
     StringBuilder sb = new StringBuilder();
     sb.Append("Manual Numbers=");
     sb.Append(Environment.NewLine);
     sb.Append("Installation Technical Manual: ");
     sb.Append("Performance Manual: ");
     sb.Append("Planned Maintenance Technical Manual: ");
     sb.Append("Service Calibration Manual: ");
     sb.Append("System Information Manual: ");
     sb.Append(Environment.NewLine);
     tw.Write(sb.ToString());
 }