2012-11-15 120 views
3

我正在使用文件流創建文件,但在此之前,我正在應用條件以查看文件是否存在。當我點擊按鈕,如果suppive文件在那裏,它刪除該文件。它的好,再次如果我按下按鈕的文件被創建。第一次它運作良好。在C#中,第二次創建文件時會拋出異常

現在文件被創建,如果我按下按鈕,它應該刪除,但它正在顯示一個異常,說* 該進程無法訪問文件'C:\ Hello1',因爲它正在被另一個進程使用。 *

下面是我的代碼

 private void button2_Click(object sender, EventArgs e) 
    { 
     string fileName = @"C:\Hello1"; 
     if 

      (File.Exists(fileName)) 
     { 
      File.Delete(fileName); 
      MessageBox.Show("File is deleted"); 
     } 
     else 
     { 
      FileInfo createFile = new FileInfo(fileName); 
      FileStream create = createFile.Create(); 
      MessageBox.Show("Created"); 

     } 
    } 

那麼,爲什麼我不能刪除第二次,我的文本文件,是不是也打開,但仍是露出了異常。

+1

難道說你在創建文件時沒有關閉/處理你的'Filestream',所以當你試圖刪除它時,你的程序第二次仍然有效地打開文件? – Bridge

回答

0

哦,是的,我得到了答案,

我需要使用

 private void button2_Click(object sender, EventArgs e) 
{ 
    string fileName = @"C:\Hello1"; 
    if 

     (File.Exists(fileName)) 
    { 
     File.Delete(fileName); 
     MessageBox.Show("File is deleted"); 
    } 
    else 
    { 
     FileInfo createFile = new FileInfo(fileName); 
     FileStream create = createFile.Create(); 
     MessageBox.Show("Created"); 
     create.Close(); 

    } 
} 

我們需要使用create.Close();

+0

或使用'using'在離開使用範圍時自動調用'Dispose()'。 – Default

+1

哦,是的,我可以使用dispose(),謝謝 – Sohail

3

你永遠不會關閉創建文件的流。將您的FileStream置於using聲明中,該聲明將自動清理打開的文件句柄。

using(FileStream create = createFile.Create()) 
{ 
    //code here 
} 
+0

是的,謝謝我得到它 – Sohail

2

流仍然是打開的文件,當你試圖第二次,試試這個:

private void button2_Click(object sender, EventArgs e) 
{ 
    string fileName = @"C:\Hello1"; 
    if 

     (File.Exists(fileName)) 
    { 
     File.Delete(fileName); 
     MessageBox.Show("File is deleted"); 
    } 
    else 
    { 
     FileInfo createFile = new FileInfo(fileName); 
     using(FileStream create = createFile.Create()) 
     { 
      MessageBox.Show("Created"); 
     } 
    } 
} 
0

這裏是我以前寫本地日誌的例子:

  StreamWriter log; 

      string fpath = string.Format(@"{0}\{1}.txt",GetDirectory(),DateTime.Now.ToString("yyy-MM-dd")); 
      if (!File.Exists(fpath)) 
      { 
       log = new StreamWriter(fpath); 
      } 
      else 
      { 
       log = File.AppendText(fpath); 
      } 

      log.WriteLine(string.Format("{0} ==> {1}",DateTime.Now.ToString("MM/dd/yyy HH:mm:ss"), Message)); 

      log.Dispose(); 
      log = null; 
相關問題