Я получаю сообщение об ошибке:
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
, но это невозможно, поскольку запись данных не происходит в простом или коротком составном операторе.Записывающий делегат используется классом журналирования для записи данных в файл.
Согласно другим решениям в переполнении стека, в цикле 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 ++ для обработки файлового ввода-вывода (поскольку неуправляемые C и C ++ не используют .NET Framework).
- Обучение тому, как сообщить .NET Framework, что нужно поторопиться и закрыть файл.
Я использую MS Visual C # 2008 Express в Windows 7, 64-битная архитектура.