Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limitations of TEMP directory in Windows?

I have an application written in Python that's writing large amounts of data to the %TEMP% folder. Oddly, every once and awhile, it dies, returning IOError: [Errno 28] No space left on device. The drive has plenty of free space, %TEMP% is not its own partition, I'm an administrator, and the system has no quotas.

Does Windows artificially put some types of limits on the data in %TEMP%? If not, any ideas on what could be causing this issue?

EDIT: Following discussions below, I clarified the question to better explain what's going on.

like image 453
Benjamin Pollack Avatar asked Nov 05 '09 21:11

Benjamin Pollack


2 Answers

What is the exact error you encounter?

Are you creating too many temp files?

The GetTempFileName method will raise an IOException if it is used to create more than 65535 files without deleting previous temporary files.

The GetTempFileName method will raise an IOException if no unique temporary file name is available. To resolve this error, delete all unneeded temporary files.

One thing to note is that if you're indirectly using the Win32 API, and you're only using it to get temp file names, note that while (indirectly) calling it:

Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file.

If you're using that path but also changing the value returned, be aware you might actually be creating a 0byte file and an additional file on top of that (e.g. My_App_tmpXXXX.tmp and tmpXXXX.tmp).

As Nestor suggested below, consider deleting your temp files after you're done using them.

like image 71
Mike Atlas Avatar answered Oct 12 '22 22:10

Mike Atlas


Using a FAT32 filesystem I can imagine this happening when:

  • Writing a lot of data to one file, and you reach the 4GB file size cap.
  • Or when you are creating a lot of small files and reaching the 2^16-2 files per directory cap.

Apart from this, I don't know of any limitations the system can impose on the temp folder, apart from the phyiscal partition actually being full.

Another limitation is as Mike Atlas has suggested the GetTempFileName() function which creates files of type tmpXXXX.tmp. Although you might not be using it directly, verify that the %TEMP% folder does not contain too many of them (2^16).

And maybe the obvious, have you tried emptying the %TEMP% folder before running the utility?

like image 29
Yannick Motton Avatar answered Oct 12 '22 23:10

Yannick Motton