.net Path.GetTempFileName()是否可以缓存?

.net Path.GetTempFileName()是否可以缓存?,.net,temp,.net,Temp,我有一个奇怪的问题。。。我想我已经缩小了范围,我们使用Page.GetTempFileName()创建了一个临时文件 我有时会收到一条错误消息,说明无法创建文件,因为该文件已经存在。 使用Path.GetTempFilename()是否有可能生成相同的文件名并被缓存 我正在更改代码以使用: Path.Combine(System.IO.Path.GetTempPath(), string.Concat(Guid.NewGuid().ToString(), ".xls")); 希望这将生成一个唯

我有一个奇怪的问题。。。我想我已经缩小了范围,我们使用
Page.GetTempFileName()
创建了一个临时文件

我有时会收到一条错误消息,说明
无法创建文件,因为该文件已经存在。

使用
Path.GetTempFilename()
是否有可能生成相同的文件名并被缓存

我正在更改代码以使用:

Path.Combine(System.IO.Path.GetTempPath(), string.Concat(Guid.NewGuid().ToString(), ".xls"));
希望这将生成一个唯一的文件名,但我担心同样的问题可能会出现。

Path.GetTempFilename()在磁盘上创建一个实际的文件;一旦你有了这个文件名,根据你在做什么,你可能会触发一些事情。它的编写目的是返回一个实际文件,以避免与过去旧的temp filename方法相关联的争用条件(例如,C标准库中的tmpnam)

请注意,如果使用此方法创建的文件超过65535个而未删除它们,或者无法生成唯一的文件名,则会引发异常


那么,从Path.GetTempFilename()中获取文件名后,您将如何处理该文件名?

我们使用SyncFusion库从返回的一些数据生成Excel(xls)文件。因此,我们将文件从
.tmp
移动到
.xls
,然后使用
SaveAs
写入文件。完成后,我们通常会删除该文件。有时,这种情况似乎不会发生……嗯,调用只验证名称未与.tmp扩展名一起使用。当您重命名它时,是否首先检查是否已经有一个文件具有该名称,但具有.xls?当这个失败时,temp目录中有多少个文件(在那之后它是一直失败,还是偶尔失败?)这只是偶尔发生的。所以它可能是重用现有的文件名,因为它不作为tmp存在。。。有趣。我希望我提到的关于使用guid创建文件的上述更改能够起作用。为了安全起见,我甚至添加了一个while循环来检查文件是否存在,并重新生成一个新名称。