2013-10-25 71 views
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(); 
} 

但是當我點擊關閉按鈕它不工作,我必須點擊它多次。 有什麼問題?

編輯:這讓我這個異常:「該進程無法訪問該文件‘...’,因爲被其他進程(粗略的翻譯)¿我如何修復它利用

最後編輯:我想通IR了,在我aplication其他方法將其寫入後不關閉程序,非常感謝你的所有對你的幫助

+0

在第一行放置一個斷點。它甚至會進入該區塊嗎? – sircodesalot

+3

您確定要多次點擊嗎?你確定你不只是不耐煩嗎?嘗試點擊一次,它的工作?它在寫入文件時可能會凍結一秒。 –

+1

您是否在輸出窗口中看到「第一次機會異常」通知?使用64位版本的Windows? –

回答

-1

請檢查形式結束的情況下,在設計, 後面的代碼(Form1_FormClosing)和設計ner模式活動的名稱相等

請把放在你的代碼後面也是。

請在你的事件中使用的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); 
    } 
} 
0

使用的TextWriter代替,敷用一個塊中。我可以用你的代碼中看到的問題是

For循環:

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()); 
}