Avatar billede stigc Nybegynder
28. april 2005 - 19:23 Der er 12 kommentarer og
2 løsninger

%temp% til fuld sti

Kan jeg fra VB få lavet en streng "%temp%" om til den fulde sti til temp drevet?

Ligesom i cmd

echo %temp%
Avatar billede terry Ekspert
28. april 2005 - 19:50 #1
Try
environ("TEMP")
Avatar billede joern Nybegynder
28. april 2005 - 20:47 #2
Hej.

Du kan bruge FSO - File System Object til at få temp-mappen på det drev hvorfra applikationen afvikles

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")
  sydir = fso.getspecialfolder(1)    'systemmappen
  tmpmappe = fso.getspecialfolder(2)

M.v.h. Jørn
Avatar billede stigc Nybegynder
28. april 2005 - 21:19 #3
det skal være strengen "%temp%"
Avatar billede stigc Nybegynder
28. april 2005 - 21:22 #4
Fx skal "%temp%/text.txt" oversættes til den fulde sti.
Avatar billede sjh Nybegynder
28. april 2005 - 21:32 #5
Når ja hvis du skal være besværlig så kan du jo bare bruge Replace()

Private Sub Form_Load()
Dim strPath As String
Dim strTemp As String

  strTemp = Environ("TEMP")
 
  strPath = "%temp%\text.txt"
 
  strPath = Replace(strPath, "%temp%", strTemp)

  MsgBox strPath
End Sub
Avatar billede stigc Nybegynder
28. april 2005 - 21:37 #6
Du forstår ikke, hvad så når der står "%USERPROFILE%/text.txt"?

Jeg har fundet løsningen. Et API kald kan gøre det - prøver det i morgen. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/policy/policy/expandenvironmentstringsforuser.asp
Avatar billede sjh Nybegynder
28. april 2005 - 22:05 #7
Nu skal du se min ven.. den kan du klare sådan her:

Option Explicit

Private Sub Form_Load()
Dim strPath As String
  strPath = "%USERPROFILE%\text.txt"
  MsgBox EnvironString(strPath)
End Sub

Public Function EnvironString(strString As String) As String
Dim i As Long
Dim strOne As String
Dim strOut As String
Dim strEnv As String
Dim blnSel As Boolean
  For i = 1 To Len(strString)
    strOne = Mid$(strString, i, 1)
    Select Case LCase$(strOne)
          Case "%"
            blnSel = Not blnSel
            If strEnv <> "" Then
              strOut = (strOut & Environ(strEnv))
              strEnv = ""
            End If
          Case "a" To "z"
            If blnSel = True Then
              strEnv = (strEnv & strOne)
                Else
              strOut = (strOut & strOne)
            End If
          Case Else
            blnSel = False
            strOut = (strOut & strOne)
    End Select
  Next
  EnvironString = strOut
End Function
Avatar billede sjh Nybegynder
28. april 2005 - 22:13 #8
hvis du også skal have NUMBER_OF_PROCESSORS så skal du lige tilføje "_"
i denne linje ->        Case "a" To "z", "_"
Avatar billede sjh Nybegynder
28. april 2005 - 22:34 #9
Men ok.. så har du den her i API version ;)


Option Explicit

Private Declare Function ExpandEnvironmentStringsForUserA Lib "userenv.dll" ( _
                                                          ByVal hToken As Long, _
                                                          ByVal lpSrc As String, _
                                                          ByVal lpDest As String, _
                                                          ByVal dwSize As Long) As Long

Private Sub Form_Load()
Dim strPath As String
  strPath = "%USERPROFILE%\text.txt"
  MsgBox APIEnvironString(strPath)
End Sub

Public Function APIEnvironString(ByVal strString As String) As String
Dim lngRet As Long
Dim strTemp As String * 260
  lngRet = ExpandEnvironmentStringsForUserA(0&, _
                                            strString, _
                                            strTemp, _
                                            Len(strTemp)) - 1
  If lngRet Then
    APIEnvironString = Left$(strTemp, lngRet)
      Else
    APIEnvironString = strString
  End If
End Function
Avatar billede sjh Nybegynder
28. april 2005 - 23:13 #10
Da API version kun virker på disse windows versioner:

Client Requires Windows XP or Windows 2000 Professional.
Server Requires Windows Server 2003 or Windows 2000 Server.

Her jeg lavet det så smart at den bare bruger Environ$() hvis API ikke virker ;)

'---------------------------------------- Form1 ----------------------------------------
Option Explicit

Private Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibraryA Lib "kernel32.dll" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32.dll" ( _
                                                          ByVal hModule As Long, _
                                                          ByVal lpProcName As String) As Long
Private Declare Function ExpandEnvironmentStringsForUserA Lib "userenv.dll" ( _
                                                          ByVal hToken As Long, _
                                                          ByVal lpSrc As String, _
                                                          ByVal lpDest As String, _
                                                          ByVal dwSize As Long) As Long

Public Function EnvironString(ByVal strString As String) As String
Dim lb As Long
Dim lngRet As Long
Dim strTemp As String * 260

  lb = LoadLibraryA("userenv.dll")
  If GetProcAddress(lb, "ExpandEnvironmentStringsForUserA") Then
    ' Client Requires Windows XP or Windows 2000 Professional.
    ' Server Requires Windows Server 2003 or Windows 2000 Server.
    lngRet = ExpandEnvironmentStringsForUserA(0&, _
                                              strString, _
                                              strTemp, _
                                              Len(strTemp)) - 1
   
   
    If lngRet Then
      EnvironString = Left$(strTemp, lngRet)
        Else
      EnvironString = strString
    End If
      Else
    ' Win9x, 2000, 2003, XP...
    EnvironString = Win9xEnvironString(strString)
  End If

  If lb Then
    FreeLibrary lb
  End If
End Function

Private Function Win9xEnvironString(strString As String) As String
Dim i As Long
Dim strOne As String
Dim strOut As String
Dim strEnv As String
Dim blnSel As Boolean
  For i = 1 To Len(strString)
    strOne = Mid$(strString, i, 1)
    Select Case LCase$(strOne)
          Case "%"
            blnSel = Not blnSel
            If strEnv <> "" Then
              strOut = (strOut & Environ$(strEnv))
              strEnv = ""
            End If
          Case "a" To "z", "_"
            If blnSel = True Then
              strEnv = (strEnv & strOne)
                Else
              strOut = (strOut & strOne)
            End If
          Case Else
            blnSel = False
            strOut = (strOut & strOne)
    End Select
  Next
  Win9xEnvironString = strOut
End Function

Private Sub Form_Load()
Dim strPath As String
  strPath = "%USERPROFILE%\text.txt"
  MsgBox EnvironString(strPath)
End Sub
'---------------------------------------- Form1 ----------------------------------------
Avatar billede terry Ekspert
29. april 2005 - 10:05 #11
what is wrong with?

msgbox environ("TEMP") & "\" & ntuser.dat
Avatar billede stigc Nybegynder
29. april 2005 - 11:26 #12
Fin løsning.
Avatar billede stigc Nybegynder
29. april 2005 - 11:27 #13
terry> Strengen er en parameter til mit program. Der kan stå hvad som helst.
Avatar billede terry Ekspert
29. april 2005 - 12:06 #14
environ returns the values of system variable such as the temp folder

If you open a DOS box and write
SET

then you will see the variables you  can use.

So if temp is a string containing one of these values then this should give you what you want

msgbox Environ(temp)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester