"Bad Escape Sequence" verkürzte Umgebungsvariablen
Übersicht

![]() |
BlitzMoritzBetreff: "Bad Escape Sequence" verkürzte Umgebungsvariablen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Folgende Situation: Ich möchte (unter Windows) zur Laufzeit eine Datei in einem temporären Verzeichnis (zwischen-)speichern und im zweiten Schritt ein anderes Programm mit dieser Datei als Argument starten, etwa so:
BlitzMax: [AUSKLAPPEN] Local filepath:String = GetEnv_("TMP") + "\file" Die Anführungszeichen (Chr(34)) sind nur nötig, falls der Dateiname ein Leerzeichen enthält. Die Umgebungsvariable GetEnv_("TMP") liefert (wahrscheinlich aufgrund der Stringlänge) eine Art "abgekürzten" Pfad, wobei an den gekürzten Stellen das Zeichen ~ steht. Während die BlitzMax-eigenen Befehle wie z.B. WriteFile, FileType usw.. damit keine Probleme zu haben scheinen, verweigert jedoch die Konsole (die mit system_ aktiviert wird), solch einen Pfad bzw. meldet "Bad Escape Sequence" aufgrund des besagten Zeichens ~ Hat jemand eine Idee, wie man die verkürzte Umgebungsvariablen wieder in einen vollständigen korrekten Pfad-String verwandeln kann? Realpath(filepath) schafft das beispielsweise nicht. |
||
- Zuletzt bearbeitet von BlitzMoritz am Di, Aug 18, 2009 15:12, insgesamt einmal bearbeitet
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit ein wenig googlen bin ich gerade darauf gestoßen das man mit getenv_("USERPROFILE") den Pfad zum Benutzer bekommt, da hängst du einfach "\Anwendungsdaten\Temp" dran.
BlitzMax: [AUSKLAPPEN] Local filepath:String = GetEnv_("USERPROFILE") + "\Anwendundsdaten\Temp\file" Sofern ich dich richtig verstanden habe sollte das dein Problem lösen ![]() MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
aber das funktioniert nur auf deutschen systemen | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und der Temp-Pfad kann auch von Windows aus geändert werden. In diesem Fall würd's auch nichts mehr nützen... | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja stimmt, das ist nur begrenzt eine Lösung =/
http://msdn.microsoft.com/en-u...S.85).aspx Diese Funktion wandelt einen ShortPath in einen LongPath um, ich denke das wäre das richtige, allerdings hab ich immer noch keine Ahnung davon wie man die Funktionen für BlitzMax bereitstellt, aber irgendjemand wird das sicher können oder? MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
In BMax ist ~ das Escape-Zeichen(So kannst du dein Chr-Zeug einfach durch ~q im String ersetzen, steht übrigens sogar in der Doku, die du ja hoffentlich gelesen hast). Um wirklich das zeichen ~ zu bekommen, schreibe in BMax-Strings einfach ~~ | ||
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für Eure Ratschläge. ![]() @BtbN: Wo steht das genau in der Doku? In welchem Kapitel, unter welchem Stichwort? Ich find' da nie 'was... Dein Hinweis ließ mich aber noch genauer recherchieren, wobei ich feststellte, dass das Problem tatsächlich nicht beim Konsolenargument lag, sondern DOCH innerhalb BlitzMax! Und leider kann ich das dort auch nicht mit den ~q bzw. ~~ Tipps beheben. Die Sache ist nämlich noch vertrackter bzw. doppelt gemoppelt: Ich erstelle mit einem eigenen Programm einen Quellcode und möchte ihn vom BlitzMax-Compiler, also bmk.exe kompilieren lassen. Hab' jetzt folgenden Kompromiss gefunden: Ich nehme ein Array mehrerer temporär-tauglicher Verzeichnis-Möglichkeiten BlitzMax: [AUSKLAPPEN] tmpdirlist = [GetEnv_("TMP"), GetEnv_("windir") + "/Temp", GetEnv_("USERPROFILE"), GetEnv_("ALLUSERSPROFILE"), CurrentDir(), "C:/"] und suche in einer Schleife welcher Eintrag davon frei vom Zeichen ~ (mit dem Asc-Code 126) ist (und natürlich beschreibbar ist): BlitzMax: [AUSKLAPPEN] If Instr(tmpdirlist[i], Chr(126)) = 0 Then ... Als erster tauglicher Kandidat erwies sich übrigens "C:\WINDOWS\Temp" |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du den String natürlich in ein neu zu kompilierendes BMax programm schreibst, must du beachten, dass auch dort im string, der aus deinem String entsteht, das ~-Zeichen richtig escaped ist.
Also wenn du im finalen programm einen String printen willst: Print "Print ~q~~~~~q" Gibt aus: Print "~~" Gibt aus: ~ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group