我有2個程序,一個是序列化XXXX.xml,另一個是反序列化XXXX.xml.temp文件。這兩個程序都是單獨的,並使用不同的線程,每個預定義的時間間隔都會發生。進程無法訪問文件'',因爲它正在被另一個進程使用
以下是讀取xml的代碼。 這裏我得到了以下異常:因爲它正在被另一個進程使用
該進程無法訪問該文件'。
private void StartDiskFlushThread()
{
_flushThread = new Thread(ThreadProc);
_flushThread.IsBackground = true;
_flushThread.Start();
}
private void ThreadProc()
{
try
{
while (_flushThread.IsAlive)
{
FlushStepsToFile();
Thread.Sleep(_flushInterval);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
Log.Error("ThreadProc failed", ex);
}
}
private void FlushStepsToFile()
{
try
{
SerializeSteps(1);
}
catch (Exception ex)
{
Log.Error("Failed to flush steps to disk, retrying", ex);
Thread.Sleep(1000);
SerializeSteps(2);
}
}
private void SerializeSteps(int trycount)
{
XmlSerializer serializer = new XmlSerializer(typeof(DetailedSteps));
try
{
using (TextWriter textWriter = new StreamWriter(_targetFileLocation))
{
serializer.Serialize(textWriter, _detailedSteps);
}
}
catch (Exception ex)
{
Log.ErrorFormat("SerializeSteps method failed. try #{0}. Error:{1}", trycount, ex);
}
}
至於讀取xml的代碼。 該程序也是一個將XXXX.xml複製到XXXX.xml.temp並讀取臨時文件的線程。
private void CopyPartialLog()
{
try
{
File.Copy(ReportFile, DestReportFile, true);
}
catch (Exception ex)
{
Log.Error("CopyPartialLog failed", ex);
}
}
我沒有例外那裏,因爲我讀不同的文件:XXXX.xml.temp
以下是例外,我是從第一個節目獲得該寫XML:
7077846 [SerializeSteps method failed. try #1. Error:System.IO.IOException: The process cannot access the file 'xxxx.xml' because it is being used by another process. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
我得到的例外是掛我的作家線程,我不明白爲什麼。 你有什麼建議?我該如何解決它?
作爲一種替代方法,我只是檢查是否得到該異常,表明它仍在使用中。我的意思是,真的,這就是爲什麼它是他們的 - 這個例外。但爲FileSystemWatcher建議+1! – SimpleVar