Das Notes Forum

Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet von: TMC am 13.03.04 - 20:34:13

Titel: Windows Temp-Verzeichnis in String setzen
Beitrag von: TMC am 13.03.04 - 20:34:13
Auslöser war folgender Thread: http://www.atnotes.de/index.php?board=7;action=display;threadid=14595

Gerade für Attachment-Aktionen braucht man ja immer ein temporäres Verzeichnis. Viele Entwickler bedienen sich da c:\Temp etc., was meines Erachtens nicht sauber ist aus 3 Gründen:
a) Das Verzeichnis ist evtl. gar nicht vorhanden
b) Der User hat keine Schreibrechte
c) Das Windows-Temp-Verzeichnis ist nicht c:\Temp und wird so bei Rechner-Aufräumarbeiten nicht geleert

Daher sollte man meines Erachtens immer das bei Windows definierte Temp-Verzeichnis verwenden.

Notes schafft mit der Environ-Function die Möglichkeit, dieses Verzeichnis auszulesen. Auf manchen Systemen klappt dies aber u.U. nicht, daher habe ich im folgenden Code berücksichtigt, dass im Worst Case ein Temp-Verzeichnis im Notes-Datenverzeichnis angelegt wird (wo der User auch immer Schreibrechte hat / haben sollte).

Code
Sub Click(Source As Button)
   Dim session As New NotesSession
   
   Dim szNotesDataPath As String
   Dim szExistsPath As String   
   Dim szTempPath As String
   
   'Temp-Variable setzen
   szTempPath=Environ$("Temp")
   'Tmp-Variable setzen, weil Temp nicht vorhanden
   If szTempPath="" Then
      szTempPath=Environ$("Tmp")
   End If
   
   'Worst Case: Sowohl Temp als auch Tmp ist nicht verfügbar, daher 
   'nehmen wir das Datenverzeichnis von Notes: Wenn da kein 'Temp'-Verzeichnis vorhanden, dann legen wir es an
   If szTempPath="" Then
      szNotesDataPath = session.GetEnvironmentString("Directory",True)
      szExistsPath = szNotesDataPath & "\Temp"
      If Dir$(szExistsPath,16) = "" Then
         Mkdir szNotesDataPath & "\Temp"
         szTempPath = szNotesDataPath & "\Temp"
       Else
   szTempPath = szNotesDataPath & "\Temp"
      End If
   End If
   
   Msgbox szTempPath
   
   
End Sub

Eine andere Vorgehensweise mancher Entwickler ist es, die Registry auszulesen, was aber m.E. bei unterschiedlichen Betreibssystemen zu Problemen führen kann.


Ich bin über Anregungen und Verbesserungsvorschläge dankbar :-)

Matthias
Titel: Re:Windows Temp-Verzeichnis in String setzen
Beitrag von: Semeaphoros am 13.03.04 - 21:26:52
Windows selber nimmt als Fallback das Verzeichnis "Temp" im Windows-Verzeichnis (welches standardmässig entweder "Windows" oder "Winnt" heisst. Lässt sich im Normalfall über die Environment Variable SystemRoot oder fast zuverlässiger über Windir auslesen)