1

当我关闭表单时,我想将 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();
}

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

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

最后编辑:我想通了,我的应用程序中的其他方法在写入后没有关闭程序,非常感谢大家的帮助

4

2 回答 2

0

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

对于循环:

 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());
}
于 2013-10-25T18:49:41.360 回答
-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);
    }
}
于 2013-10-25T18:30:35.163 回答