That's just right. On my W2K machine, 
once deleted the TEMP and TMP env 
vars, the API call fell back on 

"C:\Documents and Settings\mysername\" 


_____________________________________________
Bruno Bellenger
Sr. Network/Systems Administrator 

        -----Original Message-----
        From:   Tillman, James [SMTP:[EMAIL PROTECTED]]
        Sent:   Wednesday, August 28, 2002 12:47 PM
        To:     'Andre Warnier'; Bellenger, Bruno (Paris); perl-win32-users
list
        Subject:        RE: How to determine Windows Temp Folder?

        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

Reply via email to