我收到错误后:解决例外文件关闭的StreamWriter
The process cannot access the file
'C:\AMR_VOYANT_TESTING\PWM_TESTER\UUT_LOGS\TEST_LOG_PWM_10245_UUT_SN_10.TXT'
because it is being used by another process.
我的程序刷新,关闭,并配置日志文件。我的程序稍后尝试打开文件以追加更多数据。第二次打开导致上述例外。
Process Explorer
不显示文件的处理,执行过程中,可以直接访问的二进制文件或与微软的Visual C#快递2008年
没有其他进程调试模式下运行应该使用此文件,因为它是我的应用程序创建的原始文件。
Stack Overflow中的某些解决方案建议实施using
语句,但这不可行,因为数据的写入不会发生在简单或短的复合语句中。日志记录类使用编写器委托将数据写入文件。
根据堆栈溢出其他的解决方案,在for
循环,一个文件可能不会在文件被打开下一个迭代之前关闭。我已经等了超过10秒钟,然后再次打开文件,无济于事(同样的例外)。
下面是代码样本:
public void
close()
{
get_log_file().WriteLine("");
get_log_file().Flush();
get_log_file().Close();
get_log_file().Dispose();
m_log_file = null;
return;
}
private StreamWriter
get_log_file()
{
if (m_log_file == null)
{
bool successful = false;
int retries_remaining = 5;
// do
// {
// try
// {
// m_log_file = new StreamWriter(m_filename, true);
m_log_file = new StreamWriter(new FileStream(m_filename, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None));
// }
// catch (IOException)
// {
// --retries_remaining;
// System.Threading.Thread.Sleep(250); // Units are in milliseconds;
// }
// } while (!successful && (retries_remaining >= 0));
}
return m_log_file;
}
private System.IO.StreamWriter m_log_file = null;
private string m_filename;
因为我有一个最后期限,以满足,我正在寻找解决方法,此问题。我的一些想法是:
- 保持文件的打开;在测试运行期间不要打开和关闭 。
- 显示“等待文件”消息 给用户,同时轮询的文件( 看时它可以被再次打开)
- 写一个非托管C或C++ 库来处理该文件I/O (自非托管C和C++不使用 的.NET框架)。
- 学习如何告诉.NET框架 快点并关闭 文件。
我在Windows 7,64位体系结构上使用MS Visual C#2008 Express。
你为什么写自己的日志?你可以使用一个框架,如log4net来写这个日志吗?因为我可以很快给你答案。 – 2011-05-02 20:46:11
可以将FileShare.None更改为FileShare.ReadWrite吗? – DarkSquirrel42 2011-05-02 20:50:33
如果不使用“使用”,应始终使用try-finally来确保始终调用Dispose。第一次测试可能会在刷新和处理之间失败? – 2011-05-02 20:51:24