2010-10-20 186 views
2

我有以下问题:我有一些(二进制)文件,它们嵌入资源中。由于某些原因,我必须将这些文件暂时写在磁盘上。我应该如何继续?也许这可以使用GetRandomFilename()或GetTempFileName()?在C#中的磁盘上临时写入文件

+3

这两个应该工作。只记得事后清理,没有人喜欢脏的TEMP目录。 – leppie 2010-10-20 11:42:25

+0

是的,一个同事犯了一个错误,认为Windows知道临时文件可以被删除,并且会定期清理它们。最终我们达到了最高限度,并且软件崩溃了。 – StriplingWarrior 2010-10-20 16:07:55

回答

9

GetTempFileName()是在这种情况下使用的逻辑。

正如leppie所说,确保在完成后删除文件以避免任何问题。 GetTempFileName()如果用于创建超过65535个文件而不删除以前的临时文件,则会引发IOException。

0

您也可以创建一个Guid并从中创建一个文件名。保证独特和快速。

GetTempFile完全慢,因为它必须扫描免费的文件名。它只是创建一个前缀并添加一个数字。如果该名称的文件已存在,则跳过该名称。如果您的临时文件夹已满,此检查需要时间。

也不可能指定应在哪个文件夹创建临时文件。 GetTempFile总是在Windows分区上创建临时文件。如果您创建大型临时文件,则需要指定它们应存储的位置。

+0

这看起来像是一些不必要的额外步骤,但是如果您发现自己在GetTempFileName()的限制之外工作,即如果您需要超过65,535个文件,则会很有用。 – 2010-10-20 11:48:24

+0

也完全无视窗口说你应该这样做的方式。 -1。 – TomTom 2010-10-20 12:04:04