表格未结案

时间:2013-10-25 18:27:16

标签: c# .net winforms forms stream

当我关闭表单时,我想将somo数据写入文本文件,我有:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    StreamWriter archivo = new StreamWriter(@"C:\Users\Marcelo\Documents\Proyectos\database.txt");
    for (int i = 1; i <=10 ; i++)
    {
        archivo.Write(nombres[i] + " " + temp[i] + " " + cap[i]);
        if (i != nseries)
            archivo.Write("\r\n"); 
    }
    archivo.Close();
}

但是当我点击关闭按钮它不起作用时,我必须多次单击它。 怎么了?

编辑:它让我遇到这个例外:“进程无法访问文件'...',因为正在被其他进程使用(粗略翻译)¿我该如何解决它?

最终编辑:我想出来了,我的应用程序中的其他方法是在写完之后没有关闭程序,非常感谢你的帮助

2 个答案:

答案 0 :(得分:0)

改为使用textwriter并将其包装在using块中。我能用你的代码看到的问题是

For Loop:

 archivo.Write(nombres[i] + " " + temp[i] + " " + cap[i]);
        if (i != nseries)
            archivo.Write("\r\n"); 

结束循环:

通常,Write方法不适合在循环下调用。相反,最好在循环中构建所需的输出,并将该文本一次性刷新到文件中。请参阅以下代码:

using (TextWriter writer = File.CreateText("C:\\perl.txt"))
{
   StringBuilder sb = new StringBuilder();
   for (int i = 1; i <=10 ; i++)
   {
     sb.AppendLine(string.Format("{0} {1} {2},nombres[i],temp[i],cap[i]);
   }
  writer.Write(sb.ToString());
}

答案 1 :(得分:-1)

请检查设计师关闭表单的事件,代码 (Form1_FormClosing) 和设计器模式事件名称相等

在您的代码中添加一个断点

请在活动中使用 Try-Catch

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    try
    {
        StreamWriter archivo = new StreamWriter(@"C:\Users\Marcelo\Documents\Proyectos\database.txt");
        for (int i = 1; i <=10 ; i++)
        {
            archivo.Write(nombres[i] + " " + temp[i] + " " + cap[i]);
            if (i != nseries)
                archivo.Write("\r\n"); 

        }
        archivo.Close();
    }
    catch (Exception e)
    {
        Debug.WriteLine(e.Message);
        //MessageBox.Show(e.Message);
    }
}