function that return the temp directory of the logged user

function that return the temp directory of the logged user

Postby jacquet philippe » Sat Mar 11, 2006 2:02 pm

I am looking for the instruction that return the path of the temp directory
win2000 and WinXp
(c:\documents and settings\user1\.....)
Thanks
Philippe Jacquet
jacquet philippe
 
Posts: 22
Joined: Fri Nov 04, 2005 9:05 pm
Location: LIEGE Belgium


Thanks a lot

Postby jacquet philippe » Sun Mar 12, 2006 9:59 am

Thans
Philippe Jacquet
jacquet philippe
 
Posts: 22
Joined: Fri Nov 04, 2005 9:05 pm
Location: LIEGE Belgium

Postby James Bott » Mon Mar 13, 2006 4:14 pm

Philippe,

Enrico's solution won't always work. Here is a more comprehensive solution.

James

Code: Select all  Expand view
//--- Returns temporary directory name without trailing backslash
function getTempDir()
   local cDir   := GetEnv("TEMP")
   if empty(cDir)
      cDir := GetEnv("TMP")
   endif
   if Right( cDir, 1 ) == "\"
      cDir := SubStr( cDir, 1, Len( cDir ) - 1 )
   endif
   if !empty(cDir)
      if !lIsDir(cDir)
         cDir := GetWinDir()
      endif
   else
      cDir := GetWinDir()
   endif
return cDir
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Postby Vladimir Grigoriev » Mon Mar 13, 2006 4:27 pm

Hi James.
I think your code is incomplete. :)
It may so occur that there are defined two variables TEMP and TMP in environment. For example TEMP=C:\TEMP and TMP=C:\TMP while directory C:\TEMP does not exist but directory C:\TMP does exist.
In this case I think directory C:\TMP should be used instead of GetWinDir().

Vladimir Grigoriev
Vladimir Grigoriev
 
Posts: 54
Joined: Fri Oct 21, 2005 10:45 am
Location: Russia, Moscow

Postby Vladimir Grigoriev » Mon Mar 13, 2006 4:40 pm

Maybe something as the following :)

//--- Returns temporary directory name without trailing backslash
function GetTempDir()
local cTargetDir, cTempDir, cTmpDir
local lTempExist, lTmpExist

cTempDir := GetEnv( "TEMP" )
cTmpDir := GetEnv( "TMP" )

if ( Right( cTempDir, 1 ) == "\" )
cTempDir := SubStr( cTempDir, 1, Len( cTempDir ) - 1 )
endif

if ( Right( cTmpDir, 1 ) == "\" )
cTmpDir := SubStr( cTmpDir, 1, Len( cTmpDir ) - 1 )
endif

lTempExist := .F.
if ( !empty( cTempDir ) )
if ( IsDir(cTempDir ) )
lTempExist := .T.
endif
endif

lTmpExist := .F.
if ( !empty( cTmpDir ) )
if ( IsDir(cTmpDir ) )
lTmpExist := .T.
endif
endif

do case
case ( lTempExist )
cTargetDir := cTempDir
case ( lTmpExist )
cTargetDir := cTmpDir
otherwise
cTargetDir := GetWinDir()
endcase

return ( cTargetDir )
Vladimir Grigoriev
 
Posts: 54
Joined: Fri Oct 21, 2005 10:45 am
Location: Russia, Moscow

Postby James Bott » Mon Mar 13, 2006 4:45 pm

Vladimir,

Thanks for the improvement.

James
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Postby Vladimir Grigoriev » Mon Mar 13, 2006 4:56 pm

Also the statement

if ( Right( cTempDir, 1 ) == "\" )
cTempDir := SubStr( cTempDir, 1, Len( cTempDir ) - 1 )
endif

is not correct enough. :D

The following would be more correct.

if ( ( Right( cTempDir, 1 ) == "\" ) .AND. ! ( Right( cTempDir, 2 ) == ":\" ) )
cTempDir := SubStr( cTempDir, 1, Len( cTempDir ) - 1 )
endif

Vladimir Grigoriev
Vladimir Grigoriev
 
Posts: 54
Joined: Fri Oct 21, 2005 10:45 am
Location: Russia, Moscow

Postby Enrico Maria Giordano » Mon Mar 13, 2006 5:24 pm

James Bott wrote:Enrico's solution won't always work.


I used GetEnv( "TEMP" ) for at least 10 years and got no reports about problems with it.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8315
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Vladimir Grigoriev » Mon Mar 13, 2006 5:33 pm

Enrico Maria
I used GetEnv( "TEMP" ) for at least 10 years and got no reports about problems with it.

It is very boring! :D
Vladimir Grigoriev
 
Posts: 54
Joined: Fri Oct 21, 2005 10:45 am
Location: Russia, Moscow

Postby James Bott » Mon Mar 13, 2006 5:42 pm

Enrico,

Yea, like Valdimir says, thats too easy.

I suppose if getEnv("TEMP") returns a blank string then any temp files will just be written to the current directory. There probably won't be any error message. I'm not saying there is anything wrong with that, just that you probably wouldn't know if it was not working as expected.

James
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Postby Enrico Maria Giordano » Mon Mar 13, 2006 8:18 pm

If GetEnv( "TEMP" ) should have return an empty string then I would consider more correct to put temporary files in the current directory rather than in WINDOWS directory.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8315
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby James Bott » Mon Mar 13, 2006 9:09 pm

Enrico,

I agree. I didn't write the function I posted, I just had it in my notes. I never really carefully looked at what it was doing.

James
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Postby Vladimir Grigoriev » Tue Mar 14, 2006 9:41 am

Enrico Mario
I would consider more correct to put temporary files in the current directory

Buon girno.
In the current directory or in a directory from which your program started?
Vladimir Grigoriev
Vladimir Grigoriev
 
Posts: 54
Joined: Fri Oct 21, 2005 10:45 am
Location: Russia, Moscow

Postby Enrico Maria Giordano » Tue Mar 14, 2006 10:07 am

In the current directory (that is the one from which my program started, in my environment).

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8315
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Next

Return to FiveWin for CA-Clipper

Who is online

Users browsing this forum: No registered users and 16 guests