5

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

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

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

4

4 回答 4

10

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

您是否创建了太多临时文件

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

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

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

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

如果您使用该路径但还更改了返回值,请注意您实际上可能正在创建一个 0 字节文件和一个附加文件(例如 My_App_tmpXXXX.tmp 和 tmpXXXX.tmp)。

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

于 2009-11-05T21:52:52.190 回答
2

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

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

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

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

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

于 2009-11-05T21:51:33.420 回答
1

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

于 2009-11-05T21:43:01.223 回答
0

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

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

于 2009-11-05T21:52:31.450 回答