【发布时间】:2010-10-09 13:20:15
【问题描述】:
我需要生成一个具有 .csv 扩展名的唯一临时文件。
我现在做的是
string filepath = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv");
但是,这并不能保证我的 .csv 文件是唯一的。
我知道我遇到冲突的几率非常低(尤其是如果您认为我没有删除 .tmp 文件),但这段代码对我来说并不好。
当然,我可以手动生成随机文件名,直到最终找到一个唯一的文件名(这应该不是问题),但我很想知道其他人是否找到了解决这个问题的好方法。
【问题讨论】:
-
关于 GetTempFileName 的一些注意事项 如果 GetTempFileName 方法用于创建超过 65535 个文件而不删除以前的临时文件,它将引发 IOException。如果没有唯一的临时文件名可用,GetTempFileName 方法将引发 IOException。要解决此错误,请删除所有不需要的临时文件。
-
临时文件主要用于一组特定的条件。如果文件扩展名很重要,我想知道是否使用 GetTempFileName 不是写解决方案。我知道这已经很长时间了,但是如果您告诉我们更多有关这些文件的上下文和需求的信息,我们也许可以提出一个更好的方法。更多:support.microsoft.com/kb/92635?wa=wsignin1.0
-
记住
GetTempFileName()每次调用它都会创建一个新文件。 - 如果您立即将字符串更改为其他内容,您只是在临时目录中创建了一个新的零字节文件(正如其他人所指出的,当您在其中点击 65535 个文件时,这最终会导致它失败......) - - 为避免这种情况,请确保删除您在该文件夹中创建的所有文件(包括GetTempFileName()返回的文件,最好在 finally 块中)。
标签: c# .net file temporary-files