繁体   English   中英

Windows中TEMP目录的限制?

[英]Limitations of TEMP directory in Windows?

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

Windows是否人为地对%TEMP%的数据设置了某些类型的限制? 如果没有,有什么可能导致这个问题的想法?

编辑 :在下面的讨论之后,我澄清了这个问题,以便更好地解释发生了什么。

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

创建了太多临时文件吗?

如果GetTempFileName方法用于创建超过65535个文件而不删除以前的临时文件,则会引发IOException。

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

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM