從意見分辨率:
應用程序崩潰是由另一個問題當文件被鎖定時避免崩潰?
我讀/書面方式從2個不同的應用程序文件,當文件被讀取或寫入造成的,它總是會被鎖定應用程序A或B,他們都使用FileShare.None
。
我的問題是,即使包裝讀者周圍的try/catch它仍然崩潰與IOException異常在使用在線應用程序(不與writter發生)。
我也取得漁獲作爲catch (IOException ...
,我認爲它可以使再沒有其他的區別,使其更具可讀性。
是什麼時,文件被鎖定,並不斷嘗試,直到該文件是可忽略的正確方法是什麼?
while (true)
{
try
{
using (FileStream stream = new FileStream("test_file.dat", FileMode.Open, FileAccess.Read, FileShare.None))
{
using (TextReader reader = new StreamReader(stream))
{
// bla bla bla does not matter
}
}
}
catch
{
// bla bla bla does not matter again
}
Thread.Sleep(500);
}
寫
private bool WriteData(string data)
{
try
{
using (FileStream stream = new FileStream("test_file.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
stream.SetLength(0);
using (TextWriter writer = new StreamWriter(stream))
{
writer.Write(data);
}
}
return true;
}
catch
{
return false;
}
}
請注意,當正在使用的文件的任何過程中它讀取或書面方式所以基本上我不會放棄股權(包括作者和讀者使用FileShare.None
)任何人我正在處理異常情況,直到文件可用爲止。
,你的意思是,當你運行它「獨立」,它實際上崩潰,或者只是它顯示了拋出異常在調試器? –
獨立運行崩潰「應用程序停止運行」和最後一條錯誤消息我在錯誤日誌文件崩潰之前得到的文件與被鎖定的文件有關:System.IO.IOException:進程無法訪問文件'long_path_of_where_the_file_was',因爲它正在被另一個進程使用。' – Prix
如何使用ReaderWriterLock類? – tazyDevel