文件创建但不能写入其中

Smi*_*ith 4 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jer*_*gen 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("");
    }
Run Code Online (Sandbox Code Playgroud)

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

  • StreamWriter也需要处理. (2认同)

chr*_*.00 8

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

  • 并且在使用块中包围它,或者手动处理流也是一件好事. (4认同)

Sam*_*ica 6

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

作为参考,TextWriter tw = new StreamWriter(path);为您创建文件.你不需要打电话File.Create

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

所以这里有多个要点

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