我们在单台计算机上运行多个程序实例(使用C#编写)。在每个实例中,我们的代码尝试使用Path.GetTempFile()方法创建“许多”临时文件。但有时,我们的程序会因为异常而失败:
我检查了临时文件夹,没有发现什么奇怪的东西:剩余磁盘空间足够,临时文件数量也不是很多等等。
我只有一个解释:一个实例获取了临时文件并打开了它,但同时,另一个实例也获取了同样的临时文件名称并试图打开它。 如果这是正确的? 如果是,如何解决这个问题?如果不是,如何理解这个问题?
更新: 在安装了Windows Server 2008 HPC的计算机上失败。
谢谢, Igor.
Exception: Access to the path is denied.
StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Path.GetTempFileName()
我检查了临时文件夹,没有发现什么奇怪的东西:剩余磁盘空间足够,临时文件数量也不是很多等等。
我只有一个解释:一个实例获取了临时文件并打开了它,但同时,另一个实例也获取了同样的临时文件名称并试图打开它。 如果这是正确的? 如果是,如何解决这个问题?如果不是,如何理解这个问题?
更新: 在安装了Windows Server 2008 HPC的计算机上失败。
谢谢, Igor.
GetTempFileName
方法不是线程安全的或者不能生成良好随机化的名称,它就不会存在了。虽然我不知道确切的原因是什么... - Noldorin