Path.GetTempFileName в многопроцессорной обработке - PullRequest
8 голосов
/ 15 июля 2010

мы запускаем несколько экземпляров нашей программы (c #) на одном компьютере.В каждом случае наш код пытается создать «много» временных файлов с помощью метода Path.GetTempFile ().И иногда наша программа дает сбой за исключением:

Exception: Access to the path is denied.
StackTrace:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.Path.GetTempFileName()

Я проверил временную папку и не нашел ничего странного: достаточно свободного диска, количество временных файлов не очень большое и т. Д.

У меня есть только одно объяснение: один экземпляр получает временный файл и открывает его, но в то же время другой экземпляр также получает имя временного файла и пытается открыть его.Если это правильно?Если да, как решить проблему, если нет, как понять, в чем проблема?

UPD: ошибка на компьютере с Windows Server 2008 HPC

Спасибо, Игорь.

Ответы [ 2 ]

5 голосов
/ 15 июля 2010

msdn состояния для класса Path:

Любые открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными.

Кроме того существует две причины исключения IO:

  1. Метод GetTempFileName вызовет IOException, если он используется для создания более 65535 файлов без удаления предыдущих временных файлов.

  2. Метод GetTempFileName вызовет IOException, если уникальное временное имя файла недоступно. Чтобы устранить эту ошибку, удалите все ненужные временные файлы.

Я бы порекомендовал проверить это условие (поскольку вы явно заявляете, что создаете много временных файлов).

4 голосов
/ 25 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...