мы запускаем несколько экземпляров нашей программы (C#) на одном компьютере. В каждом случае наш код пытается создать «много» временных файлов с помощью метода Path.GetTempFile(). А иногда, наша программа завершается с исключением:Path.GetTempFileName в MultiProcessing
Exception: Access to the path is denied.
StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Path.GetTempFileName()
Я проверил временную папку и не нашел что-то странное: свободный диск достаточно, количество временных файлов не очень большое, и т.д.
I имеют только одно объяснение: один экземпляр получает временный файл и открывает его, но в то же время другой экземпляр также получает имя временного файла и пытается его открыть. Если это так? Если да, то как решить проблему, если нет, то как понять, в чем проблема?
UPD: не удалось на компьютере с Windows Server 2008 HPC
Спасибо, Игорь.
Скорее всего, я думаю. Если метод GetTempFileName не был потокобезопасным или не генерировал хорошо рандомизированное имя, его там не было. Не то, чтобы я знаю, какова точная причина ... – Noldorin
Чтобы устранить то, что, по вашему мнению, может быть причиной, просто сделайте * if (Directory.Exists (myTempFolderName)) * перед созданием временной папки - если она существует, новое имя. – slugster
Вы имеете в виду, что использовать Path.GetTempFileName() неправдоподобно? Если метод не «многопоточность или процесс сохранения», как мы можем его использовать? , когда мне нужна временная папка со специальным расширением, я использую Guid для генерации уникального имени файла. – constructor