【问题标题】:C# Create txt file and saveC#创建txt文件并保存
【发布时间】:2013-11-20 18:32:46
【问题描述】:

我正在尝试创建一个文件并保存文本,但它只是在创建文件,任何人都可以提出问题所在吗?

private void button2_Click(object sender, EventArgs e)
    {
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.Filter = "Text File|*.txt";
        sfd.FileName = "Password";
        sfd.Title = "Save Text File";
        if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string path = sfd.FileName;
            StreamWriter bw = new StreamWriter(File.Create(path));
            bw.Write(randomstring);
            bw.Dispose();
        }
    }

【问题讨论】:

  • 如果已经存在,您是要创建文件还是追加到文件?
  • Habib,我和创建新的并替换轴化一个。
  • 授予,randomstring 首先我在 label.text 中显示它,然后我尝试保存。

标签: c# forms file save


【解决方案1】:

您需要先致电bw.Close(),然后再致电bw.Dispose()。根据 API:“您必须调用 Close 以确保所有数据都正确写入底层流。” (http://msdn.microsoft.com/en-us/library/system.io.streamwriter.close(v=vs.110).aspx)

我实际上会将代码更改为:

using (StreamWriter bw = new StreamWriter(File.Create(path)))
{
    bw.Write(randomstring);
    bw.Close();
}

using 块将自动调用Dispose(),无论一切是否成功完成。

【讨论】:

  • 我看不出有任何理由调用 close,因为 Dispose 等于 close
  • @SriramSakthivel 是?
  • Reflector 是你的朋友 :)
  • @SriramSakthivel:根据我发布的 API 链接,它们不一样。
  • 该链接并未说明两者在任何地方都不同。仅供参考看看this
【解决方案2】:

尝试改用File.WriteAllText

    if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        //...
        File.WriteAllText(path, randomstring);
    }    

【讨论】:

    【解决方案3】:
    bw.Write(randomstring);
    bw.Dispose();
    

    你写了一些东西,然后完全处理掉这个对象。试试:

    bw.Write(randomstring);
    bw.Close();
    bw.Dispose();
    

    【讨论】:

      【解决方案4】:

      Per the documentation,您需要在处理它之前致电bw.Close()。此外,您应该使用using 来确保正确处理所有IDisposable

      if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
      {
          string path = sfd.FileName;
          using (var fs = File.Create(path))
          using (StreamWriter bw = new StreamWriter(fs))
          {
              bw.Write(randomstring);
              bw.Close();
          }
      }
      

      或者直接使用File.WriteAllText:

      if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
      {
          string path = sfd.FileName;
          File.WriteAllText(path, randomstring);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多