2011-09-06 63 views
2

我有2個線程通過向對方發送文件進行通信。當線程#1做一個File.Create似乎鎖定了該文件。我怎樣才能避免這種情況?

// Thread #1 
File.Create(@"C:\somedir\response.done"); 

然後線程#2應該刪除它。

// Thread #2 
while (!File.Exists(@"C:\somedir\response.done")) 
    Thread.Sleep(100); 


while (File.Exists(@"C:\somedir\response.done")) 
    { 
     try { 
       File.Delete(@"C:\somedir\response.done"); 
      } 
     catch { Thread.Sleep(1000); }; 

    } 

但是,該文件似乎被鎖定。目錄中生成了一個response.done文件,但它永遠不會被刪除。當我嘗試手動刪除它時,

「該操作無法完成,因爲該文件在MyProgram中打開。關閉該文件並重試。」

我該如何避免這種情況?

回答

10

File.Create返回FileStream。所以...關閉:

using(File.Create(path)) { 
    // add contents here if needed 
} 

using確保它是Dispose() d,因此關閉。注意:某些AV系統也可能會干擾文件訪問,但這通常不是一個大問題。

+0

這確實工作。現在它運行順利。謝謝。 –

1

您需要關閉FileStreamFile.Create(@"C:\somedir\response.done");創建。

0

改變你的代碼

// Thread #1 
using (FileStream FS = File.Create(@"C:\somedir\response.done")) {}; 
1

您還可以使用.Close()

所以,你的代碼將成爲

// Thread #1 
File.Create(@"C:\somedir\response.done").Close(); 
相關問題