Windows中TEMP目录的限制?

时间:2009-11-05 21:39:30

标签: python windows temporary-files

我有一个用Python编写的应用程序,它将大量数据写入%TEMP%文件夹。奇怪的是,它每隔一段时间就会死掉,然后回归IOError: [Errno 28] No space left on device。驱动器有足够的可用空间,%TEMP%不是它自己的分区,我是管理员,系统没有配额。

Windows是否人为地对%TEMP%中的数据设置了某些类型的限制?如果没有,关于可能导致此问题的任何想法?

编辑:经过以下讨论,我澄清了问题,以便更好地解释发生了什么。

4 个答案:

答案 0 :(得分:8)

您遇到的确切错误是什么?

你是creating too many temp files吗?

  

GetTempFileName方法将引发   如果已经习惯了IOException   创建超过 65535 的文件   删除以前的临时文件。

     

GetTempFileName方法将引发   如果没有唯一的临时值,则抛出IOException   文件名可用。解决   这个错误,删除所有不需要的   临时文件。

有一点需要注意的是,如果您间接使用Win32 API,而您只是使用它来获取临时文件名,请注意(间接)调用它时:

  

创建唯一命名的零字节   磁盘上的临时文件并返回   该文件的完整路径。

如果您正在使用该路径但也更改返回的值,请注意您实际上可能正在创建一个0byte文件和一个额外的文件(例如My_App_tmpXXXX.tmp和tmpXXXX.tmp)。

正如Nestor在下面建议的那样,考虑在使用完毕后删除你的临时文件。

答案 1 :(得分:2)

使用FAT32文件系统我可以想象这发生在:

  • 将大量数据写入一个文件,并达到4GB文件大小上限。
  • 或者当您创建大量小文件并达到每个目录上限的2 ^ 16-2个文件时。

除此之外,我不知道系统可以对temp文件夹施加任何限制,除了物理分区实际已满。

另一个限制是Mike Atlas建议使用GetTempFileName()函数创建tmpXXXX.tmp类型的文件。虽然您可能没有直接使用它,但请确认%TEMP%文件夹中不包含太多(2 ^ 16)。

也许很明显,您是否尝试在运行实用程序之前清空%TEMP%文件夹?

答案 2 :(得分:1)

Temp中不应有这样的空间限制。如果您编写了应用程序,我建议您在ProgramData中创建文件...

答案 3 :(得分:0)

对于%TEMP%目录,应该没有任何问题。

为%TEMP%的托管量设置的磁盘配额是多少?部分取决于应用程序本身正在执行的操作,其中一个可能由于达到磁盘配额而引发错误,如果此配额设置得过高,则会很痛苦。如果配额非常高,请尝试降低配额,您可以以管理员身份执行此操作。