我有一个用Python编写的应用程序,它将大量数据写入%TEMP%
文件夹。奇怪的是,它每隔一段时间就会死掉,然后回归IOError: [Errno 28] No space left on device
。驱动器有足够的可用空间,%TEMP%
不是它自己的分区,我是管理员,系统没有配额。
Windows是否人为地对%TEMP%
中的数据设置了某些类型的限制?如果没有,关于可能导致此问题的任何想法?
编辑:经过以下讨论,我澄清了问题,以便更好地解释发生了什么。
答案 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文件系统我可以想象这发生在:
除此之外,我不知道系统可以对temp文件夹施加任何限制,除了物理分区实际已满。
另一个限制是Mike Atlas建议使用GetTempFileName()
函数创建tmpXXXX.tmp
类型的文件。虽然您可能没有直接使用它,但请确认%TEMP%
文件夹中不包含太多(2 ^ 16)。
也许很明显,您是否尝试在运行实用程序之前清空%TEMP%文件夹?
答案 2 :(得分:1)
Temp中不应有这样的空间限制。如果您编写了应用程序,我建议您在ProgramData中创建文件...
答案 3 :(得分:0)
对于%TEMP%目录,应该没有任何问题。
为%TEMP%的托管量设置的磁盘配额是多少?部分取决于应用程序本身正在执行的操作,其中一个可能由于达到磁盘配额而引发错误,如果此配额设置得过高,则会很痛苦。如果配额非常高,请尝试降低配额,您可以以管理员身份执行此操作。