我收到错误消息:
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
不显示文件句柄,在执行期间直接访问二进制文件或使用 MS Visual C# Express 2008 在调试模式下运行。
其他进程不应使用此文件,因为它是我的应用程序创建的原始文件。
Stack Overflow 中的一些解决方案建议实现using
语句,但这不可行,因为数据的写入不会发生在简单或简短的复合语句中。记录类使用写入器委托将数据写入文件。
根据 Stack Overflow 中的其他解决方案,在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。