当我关闭表单时,我想将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();
}
但是当我点击关闭按钮它不起作用时,我必须多次单击它。 怎么了?
编辑:它让我遇到这个例外:“进程无法访问文件'...',因为正在被其他进程使用(粗略翻译)¿我该如何解决它?
最终编辑:我想出来了,我的应用程序中的其他方法是在写完之后没有关闭程序,非常感谢你的帮助
答案 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);
}
}