MultiProcessing中的Path.GetTempFileName

con*_*tor 9 c# multiprocessing

我们在一台计算机上运行我们程序的几个实例(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()
Run Code Online (Sandbox Code Playgroud)

我检查了临时文件夹并没有发现奇怪的东西:免费磁盘就够了,临时文件数量不是很大等等.

我只有一个解释:一个实例获取临时文件并打开它,但同时,另一个实例也获取临时文件的名称并尝试打开它.如果是对的?如果是,如何解决问题,如果不是如何理解什么问题?

UPD: 在使用Windows Server 2008 HPC的计算机上失败

谢谢你,伊戈尔.

tan*_*ius 6

Path该类的msdn状态:

此类型的任何公共static(在Visual Basic中为Shared)成员都是线程安全的。

此外,IO异常有两个原因:

  1. 如果将GetTempFileName方法用于创建超过65535个文件而不删除先前的临时文件,则将引发IOException。

  2. 如果没有唯一的临时文件名,则GetTempFileName方法将引发IOException。要解决此错误,请删除所有不需要的临时文件。

我建议检查这种情况(因为您明确声明要创建许多临时文件)。