【发布时间】:2012-06-17 06:41:26
【问题描述】:
我有两个程序,一个是序列化 XXXX.xml,另一个是反序列化 XXXX.xml.temp 文件。 这 2 个程序是独立的,并且使用每个预定义的时间间隔发生的不同线程。
以下是读取 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 方法 失败的。尝试#1。错误:System.IO.IOException:进程无法访问 文件“xxxx.xml”,因为它 正在被另一个进程使用。 在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize,FileOptions 选项,SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
我得到的例外是挂起我的作家线程,我不明白为什么。 你有什么建议?我该如何解决?
【问题讨论】: