【问题标题】:Can Path.GetTempFileName() ever cache?Path.GetTempFileName() 可以缓存吗?
【发布时间】:2011-07-13 15:24:39
【问题描述】:

我有一个奇怪的问题......我想我已经把它缩小到我们使用Page.GetTempFileName() 创建一个临时文件的程度。

我有时会收到一条错误消息,指出 Cannot create a file when that file already exists.

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

我正在更改要使用的代码:

Path.Combine(System.IO.Path.GetTempPath(), string.Concat(Guid.NewGuid().ToString(), ".xls"));

希望这会生成一个唯一的文件名,但我担心可能会出现同样的问题。

【问题讨论】:

    标签: .net temp


    【解决方案1】:

    Path.GetTempFilename() 在磁盘上创建一个实际文件;取决于您在拥有该文件名后所做的事情,您可能会触发某些事情。编写它是为了返回一个实际文件,以避免与过去较旧的临时文件名方法相关的竞争条件(例如,特别是 C 标准库中的 tmpnam。)

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

    那么,从 Path.GetTempFilename() 中取回该文件名后,你对它做了什么?

    【讨论】:

    • 我们使用 SyncFusion 库从返回的一些数据中生成 Excel (xls) 文件。所以我们将Move文件从.tmp转换为.xls,然后使用SaveAs写入文件。完成后,我们通常会删除文件。有时这不会发生它似乎...
    • 好吧,该调用仅验证该名称未与 .tmp 扩展名一起使用。当您重命名它时,您是否首先检查您是否还没有具有该名称但具有 .xls 的文件?失败时临时目录中有多少文件(之后是一直失败,还是偶尔失败?)
    • 只是偶尔。所以它可能会重用现有的文件名,因为它不作为 tmp 存在......有趣。我希望我提到的关于使用 guid 创建文件的上述更改有效。为了安全起见,我什至添加了一个 while 循环来检查文件是否存在并重新生成一个新名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多