我们在单台计算机上运行我们的程序(c#)的多个实例。 在每个实例中,我们的代码尝试在方法Path.GetTempFile()的帮助下创建“许多”临时文件。 有时,我们的计划失败,出现异常:MultiProcessing中的Path.GetTempFileName
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
谢谢 伊戈尔。
为Path
类
不可能我想。如果'GetTempFileName'方法不是线程安全的,或者没有生成一个随机的名字,它就不会在那里。不是我知道确切的原因是什么...... – Noldorin 2010-07-15 12:35:39
为了消除你认为可能的原因,只需在创建临时文件夹之前执行一个* if(Directory.Exists(myTempFolderName))* - 如果存在,然后生成一个新名字。 – slugster 2010-07-15 12:48:43
你的意思是,使用Path.GetTempFileName()不是很好的做法吗? 如果方法不是“多线程或进程保存”我们该如何使用它? 当我需要特殊扩展名的临时文件夹时,我使用Guid生成唯一的文件名。 – constructor 2010-07-15 12:56:18