【问题标题】:Limitations of TEMP directory in Windows?Windows 中 TEMP 目录的限制?
【发布时间】:2010-12-13 14:52:26
【问题描述】:

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

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

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

【问题讨论】:

  • 实际的错误代码是什么?里面的小文件多还是大文件少?

标签: python windows temporary-files


【解决方案1】:

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

【讨论】:

  • 它只是一个实用应用程序,数据实际上是临时的,所以即使你是对的,我也不愿意移动数据,除非在%TEMP% 中存储数据存在实际问题。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 我的系统是NTFS,最大可以写2GB左右。
  • 我没有投票给你;我刚回答。你可以在我的投票历史中查看。
  • 您能否提供错误代码,因为除了旧文件系统的固有限制之外,我不知道任何系统限制。
  • 不,没关系,我猜是因为大约在您回答有人撤销他的投票的同时。
  • 很遗憾,我无法收到 Win32 错误;当它在 Python 中我可以抓住它时,Python 的返回错误 28(请参阅更新的问题),在更多的阅读中,它实际上并不一定意味着它听起来像它的意思。我相应地更新了问题。 %TEMP% 上的某种类型的限制似乎仍然可能,但它本身可能不是空间。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    您遇到的具体错误是什么?

    你是creating too many temp files吗?

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

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

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

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

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

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

    【讨论】:

    • 我想我们可能会有赢家。需要做更多的测试。
    • 有趣...我不知道这个!
    • 注意:一个好的编程模式是使用 FileOptions.DeleteOnClose 打开临时文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2011-10-30
    • 2012-03-14
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多