Autor Thema: Wie bekomme ich das Windows Temp-Verzeichnis in ein String?  (Gelesen 4411 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Hi,

ja, genau das bräuchte ich jetzt: Wie bekomme ich das Windows Temp-Verzeichnis in ein String?

Benutzte Betriebssysteme: Win98 (SE), W2K, WinXP.

Ich bin mir sicher das wurde hier schon öfter gefragt und beantwortet, konnte aber nix finden.....

Hat wer Tipps für mich?

Danke,
Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #1 am: 13.03.04 - 18:39:05 »
in LotusScript: Environ("Temp")

glaub ich zumindest
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #2 am: 13.03.04 - 18:43:46 »
Ungefähr so .... leider ist das nicht einheitlich (Ausschnitt aus einer App von mir):

   TempPath=Environ$("Temp")
   If TempPath="" Then
      TempPath=Environ$("Tmp")
   End If
   If TempPath="" Then
      TempPath="C:\"
   End If
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #3 am: 13.03.04 - 18:52:14 »
Danke, das hilft schon mal.

Wie könnte ich denn den letzten If
Code
   If TempPath="" Then
      TempPath="C:\"
   End If

So umbauen:

   If TempPath="" Then
       Dim strNotesArbeitsverzeichnis as String
       strNotesArbeitsverzeichnis = ??????????
       If Exists Temp-Verzeichnis in Notes-Arbeitsverzeichnis Then
              TempPath=Notes-Arbeitsverzeichni/Temp
       Else
             lege Directory an im Notes Arbeitsverzeichnis
             TempPath=Notes-Arbeitsverzeichni/Temp
       End If
   End If

Wäre imho sauberer, als die Tmp-Dateien direkt in C:\ reinzuknallen......

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #4 am: 13.03.04 - 19:15:16 »
Holst Du Dir aus der notes.ini mit

notesSession.GetEnvironmentString( name$ [, system ] )

das Arbeitsverzeichnis:

strNotesArbeitsverzeichnis = notesSession.GetEnvironmentString("Directory",True)

Mit Dir[$] kannst Du dann überprüfen, ob es ein Temp-Directory da drin gibt.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #5 am: 13.03.04 - 19:20:57 »
OK, danke so far, werde ich mir gleich mal anschauen :-)

Dass ich dann (hoffentlich) das fertige Ergebnis poste ist Ehrensache  :)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline shiraz

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 647
  • Geschlecht: Männlich
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #6 am: 13.03.04 - 19:23:05 »
veruche mit:

temp:= @RegQueryValue("HKEY_LOCAL_MACHINE"; "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"; "TEMP");
root:= @RegQueryValue("HKEY_LOCAL_MACHINE"; "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; "SystemRoot");

ret := @If(@Contains(temp;"%SystemRoot%");@ReplaceSubstring(temp;"%SystemRoot%";root);temp);
Gruß
Christian

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #7 am: 13.03.04 - 19:31:33 »
Uhm, das geht aber mit meinem ersten Code deutlich einfacher und liefert dasselbe Ergebnis
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #8 am: 13.03.04 - 19:32:31 »
Danke shiraz, aber bei der Rehschizo-Auslesung (äh Registry) habe ich immer leichte Bauchschmerzen, weil leider sehr betriebssystem-individuell.
Ich werde jetzt mal Jens' Vorschlag testen...
Schön wäre ja, dass das dann auch unter Notes R7 geht, wo wir immer noch nicht wissen, ob es dau auch endlich einen Linux-Client gibt :) (ich glaube ja nicht daran)

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #9 am: 13.03.04 - 20:00:40 »
Warum wissen wir das nicht? Notes 7 bekommt keinen Linux-Client. Es wird einen Rich-Client unter Workplace geben und da Workplace auch unter Linux läuft, lässt sich dann dieser Client gegen einen Domino-Server verwenden und das wird dann der Linux-und-andere-Systeme-Client sein.

Zur Temp-Geschichte: Unter Linux wird das TempPath=Environ....... tatsächlich nicht zwingend ein Ergebnis liefern. Diese Geschichte ist plattformspezifisch.

Und noch etwas, der Fallback-Fall, der bei mir auf C:\ gesetzt ist, sollte eigentlich gar nie eintreten. Meines Wissens erzwingen alle gängigen Windows-Versionen das Vorhandensein entweder der Temp oder der Tmp Environment-Variablen. Deshalb war mir das auch egal, den Fallback einfach auf C:\ zu setzen (was übrigens auch unter Linux wieder nicht funktionieren würde).
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #10 am: 13.03.04 - 20:13:49 »
Sorry, meinte R8  :)
IBM schweigt sich dem Thema "Reiner Notes Client unter Linux" wohl immer noch aus, bzw. sagt dazu einfach nix. Meines Erachtens korrekt, die Integration ist wohl wirklich nicht einfach. Mir war gar nicht bewusst, dass es auch unter Mac keine Entwicklungsumgebung gibt (bis ich das letztens mal gelesen habe).

Aber egal, zurück zur Frage:

Hier mal mein Code-Wirrwarr:
Code
Sub Click(Source As Button)
   Dim session As New NotesSession
   
   Dim szNotesDataPath As String
   Dim szExistsPath As String   
   Dim szTempPath1 As String
   Dim szTempPath2 As String
   Dim szTempPath3 As String
   
   
   szTempPath1=Environ$("Temp")
   If szTempPath1="" Then
      szTempPath2=Environ$("Tmp")
   End If
   
   If szTempPath2="" Then
      szNotesDataPath = session.GetEnvironmentString("Directory",True)
      szExistsPath = szNotesDataPath & "\Temp"
      If Dir$(szExistsPath,16) = "" Then
         Mkdir szNotesDataPath & "\Temp"
         Msgbox "Dir Temp angelegt in " & szNotesDataPath
         szTempPath3 = szNotesDataPath & "\Temp"
      Else
         Msgbox "Dir gefunden: " & Dir$(szExistsPath,16)
      End If
      
      
      
   End If
   
   
   
   
   Msgbox "1 - Temp: " & szTempPath1 & Chr(10) & "2 - Tmp: " & szTempPath2 & Chr(10) & "3 - Data: " & szTempPath3
   
   
End Sub

So geht es dank Jens' Tipps :-)

Werde das natürlich noch sauberer machen, und wenn ich noch dazu komme, einen Artikel für Tipps&Tricks schreiben, da das wohl ja immer mal gefragt wird.


Per Default c:\ zu nehmen, wenn Temp bzw. Tmp = "" halte ich nicht für gut (auch wenn das nicht vorkommen sollte - aber dann kann ich ja auch gleich die If-Anweisung weglassen). Erstens weil dann im Main-Dir irgendwelcher Temp-Müll landet, und zweitens weil - gewisse Rechtevorgabe vorausgesetzt - nicht jeder User Schreibrechte auf c:\ hat.
Ins Notes-Datenverzeichnis sollte aber jeder User Schreibrechte haben, daher diese Lösung.....

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #12 am: 13.03.04 - 21:23:32 »
Du hast natürlich recht mit dem C:\, mein Code stammt auch noch aus Win95-Zeiten, da war das kein Problem und es handelte sich um höchstens 2 Dateien, die sich immer wieder überschrieben haben, da war das mit dem C:\ nicht soo tragisch. Deine Lösung ist natürlich besser. Nur das sz..... passt mir nicht. In meinen Augen ist sz.. als Prefix für Basic-Strings ein Dummfug, schliesslich sind das keine "Zero-Terminated strings", wie das in der ungarischen Notation der Fall ist (alles andere, inkl. C-StandardBibliotheken und die jüngsten LotusScript Stringfunktionen verwenden str als Prefix: strCompare, strLeft, strRight .......)

Uebrigens, der Code hier hat einen Haken: Wenn er den szTempPath1 gefunden wird, dann geht er trotzdem in den Fallback-Code, weil szTempPath2 in dem Falle gleich "" ist.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #13 am: 13.03.04 - 21:28:31 »
Jens, ich wollte damit auch nicht Dein Beispiel kritisieren, wenn es so rüberkam: SORRY!

Zu sz: Das stimmt, ich hatte mir das so angewohnt, weil
a) in einigen I'net-Codebeispielen das auch so verwendet wird
b) wir da auch im Projekt-Bereich das als "valid" gesehen hatten
Ich sollte mir das aber schleunigst wieder abgewöhnen, ein "str" wäre da einfach sauberer.

Der korrekte Code ist übrigens unter Tipps und Tricks, dies war nur mein "Code-Wirrwarr" zum testen, und sollte so nicht verwendet werden.

Grüße,
Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Wie bekomme ich das Windows Temp-Verzeichnis in ein String?
« Antwort #14 am: 13.03.04 - 21:45:37 »
Ich hab das nicht als Kritik aufgefasst, ich nehme mal an, dass ich selbst das ungeschickt formuliert habe --- sorry meinerseits, von Dir ist keine Entschuldigung erforderlich!

Ich wollte nur durchsichtig machen, warum mein Code so war. Für Attachements, wie Du das unter T&T andeutest, wäre C:\ tatsächlich katastrophal, denn das könnte rasch einmal überlaufen. In meinem Fall war das das Bereitstellen einer Mass-Mailing-Datei mit Adressdaten, das ergibt im Normalfall genau 2 Dateien, und die waren fest verdrahtet, in der Situation ist C:\ nicht so dumm, der Schrott hält sich in Grenzen und man weiss sofort, wo man aufräumen muss. Deine Lösung ist da viel sauberer mit dem Temp im Notes, wobei ich wahrscheinlich eher auf die Windows-Strategie zurückgreifen würde, das ist noch ein bisschen "normaler", wenn man dem überhaupt so sagen darf.

Danke für die geleistete Arbeit.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz