I believe it falls back to "c:\windows" (Win9x) or "c:\winnt" (WinNT) when the TEMP and TMP env vars are not set. (Yes, really! I'm not kidding. I'm pretty sure I've seen this before)
On Win2k, I think it falls back to the USERPROFILE env var before falling back to c:\winnt\ So I think you'll always get a valid directory of some kind, but not necessarily a very desirable one. You'll find the API is truly the best way to handle this, since with Win2k, c:\windows\temp is no longer the default location for user's temp files, it's actually a temp directory in their "Documents and Settings" folder. Since Microsoft uses the API, you can be pretty sure your code won't blow up in future Windows versions if you use the API, too. The same cannot be said for ENV vars, which Microsoft has always hated as much as they hate the command line. Too "unixy," I guess :-) When in Rome... jpt > -----Original Message----- > From: Andre Warnier [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, August 28, 2002 5:19 AM > To: Bellenger, Bruno (Paris); perl-win32-users list > Subject: RE: How to determine Windows Temp Folder? > > > I bow to the master(s). > > Now the question I have is : > > If one deletes the Win32 environment variables "TEMP" and > "TMP", do the > functions below still work ? > What is the logic there ? Does WinXX have a notion of > "temporary directory" > independently of what ones tells it in "TEMP" ? > Or are the two necessarily linked ? > > > > From MS Knowledge Base, hoping it helps the original questioner : > quote (Article # Q195763) > > > GetTempPath > The GetTempPath API function allows you to determine the path > location of a > system's temporary folder. It takes two parameters: the > length of a fixed- > length or pre-initialized string that will contain the path > name, and the > string itself. You must use either a fixed-length string, or a string > initialized to a length that you believe will be long enough > to contain the > path information. This is to guarantee that Visual Basic > allocates enough > buffer space for Windows to return the information. > > GetTempPath returns the length of the path name measured in > bytes, or 0 if > an error occurs. If the return value is greater than the > buffer size you > specified, then no path information was written to the string. > > The declaration for GetTempPath is provided in the sample below. > GetTempFileName > The GetTempFileName API function is used to create a fully-qualified > temporary file name at a given location. The function takes four > parameters: the string containing the path for the file, a string > containing a prefix used to start the unique file name, a > unique number to > construct the temp name, and, finally, a fixed-length or > pre-initialized > string used to return the fully qualified file name. Both the path and > prefix strings are required and cannot be empty. The unique > number can be 0 > (NULL), in which case GetTempFileName creates a unique number > based on the > current system time. > > GetTempFileName returns the unique number used to create the > file name, or > returns 0 if an error occurs. > > unquote > > > > André Warnier > EIS LP > [EMAIL PROTECTED] > > > Message text written by "Bellenger, Bruno \(Paris\)" > > > > http://opensource.activestate.com/authors/jandubois/Perl/TPC3/fun.html > <http://opensource.activestate.com/authors/jandubois/Perl/TPC3 /fun.html> also has this slightly improved version from Jan Dubois : use strict; use Win32::API; my $GetTempPath = new Win32::API "kernel32", "GetTempPath", [qw(N P)], 'N'; my $path = ' ' x 256; my $len = $GetTempPath->Call(length $path, $path); if ($len == 0) { print "GetTempPath() failed: $^E\n"; } elsif ($len > length $path) { print "Buffer too small; we need $len bytes\n"; } else { $path = substr($path,0,$len); print "Temp path is $path\n"; } _____________________________________________ Bruno Bellenger Sr. Network/Systems Administrator < _______________________________________________ Perl-Win32-Users mailing list [EMAIL PROTECTED] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs _______________________________________________ Perl-Win32-Users mailing list [EMAIL PROTECTED] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs