Hinzuladen von .ini-Dateien
Hinzuladen von .ini-Dateien
Hallo,
ich habe ein Anwendungsprogramm geschrieben, genauer einen Paßwortgenerator, der bei Programmstart eine zweite Datei laden soll, und zwar eine .ini oder .cfg-Datei (Konfigurationsdatei). Das Problem besteht nun darin, daß das Programm auch auf anderen Rechnern laufen soll, die eine ganze Verzeichnisstruktur haben. In meinem Quellkode kann ich eine Konstante wie
#Qkv_Pg="D:\Programmierung\Basic-Programme\PureBasic\Paßwortgenerator\"
festlegen, die dann auf meinem Rechner läuft, auf dem fremden aber mit ziemlicher Sicherheit nicht.
Nun kann ich natürlich einen Datei-öffnen-Dialog programmieren und den "Fremdnutzer" selbst nach der Datei suchen lassen. Das funktioniert dann aber nur bei diesem einen Mal, denn der Pfad zur cfg-Datei des Fremdnutzers wird ja nach Programmende nirgendwo gespeichert, so daß das ganze Spiel beim zweiten Programmstart von vorne losgeht. Wie löst man am besten dieses Problem?
In diesem Zusammenhang noch eine zweite Frage. Ich habe einerseits ein Quellkodeverzeichnis, das beim Kompilieren/Starten sowohl den Quellkode als auch die .cfg-Datei aus diesem Verzeichnis lädt. Andererseits gibt es aber auch noch die fertige, ausführbare exe-Datei, die sich nicht im Quellkodeverzeichnis, sondern ganz woanders befindet. Die exe-Datei soll ihre cfg-Datei natürlich aus ihrem Verzeichnis und nicht aus dem Quellkodeverzeichnis laden.
Wie kann ich das Programm unterscheiden lassen zwischen a) einer Kompilierung für das Debuggen und b) der Erstellung der fertigen .exe-Datei? Im Fall a) soll die cfg-Datei aus dem Quellkodeverzeichnis geladen werden, im Fall b) aus dem Verzeichnis der .exe-Datei.
Vielen Dank
ich habe ein Anwendungsprogramm geschrieben, genauer einen Paßwortgenerator, der bei Programmstart eine zweite Datei laden soll, und zwar eine .ini oder .cfg-Datei (Konfigurationsdatei). Das Problem besteht nun darin, daß das Programm auch auf anderen Rechnern laufen soll, die eine ganze Verzeichnisstruktur haben. In meinem Quellkode kann ich eine Konstante wie
#Qkv_Pg="D:\Programmierung\Basic-Programme\PureBasic\Paßwortgenerator\"
festlegen, die dann auf meinem Rechner läuft, auf dem fremden aber mit ziemlicher Sicherheit nicht.
Nun kann ich natürlich einen Datei-öffnen-Dialog programmieren und den "Fremdnutzer" selbst nach der Datei suchen lassen. Das funktioniert dann aber nur bei diesem einen Mal, denn der Pfad zur cfg-Datei des Fremdnutzers wird ja nach Programmende nirgendwo gespeichert, so daß das ganze Spiel beim zweiten Programmstart von vorne losgeht. Wie löst man am besten dieses Problem?
In diesem Zusammenhang noch eine zweite Frage. Ich habe einerseits ein Quellkodeverzeichnis, das beim Kompilieren/Starten sowohl den Quellkode als auch die .cfg-Datei aus diesem Verzeichnis lädt. Andererseits gibt es aber auch noch die fertige, ausführbare exe-Datei, die sich nicht im Quellkodeverzeichnis, sondern ganz woanders befindet. Die exe-Datei soll ihre cfg-Datei natürlich aus ihrem Verzeichnis und nicht aus dem Quellkodeverzeichnis laden.
Wie kann ich das Programm unterscheiden lassen zwischen a) einer Kompilierung für das Debuggen und b) der Erstellung der fertigen .exe-Datei? Im Fall a) soll die cfg-Datei aus dem Quellkodeverzeichnis geladen werden, im Fall b) aus dem Verzeichnis der .exe-Datei.
Vielen Dank
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit
Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
-
- Beiträge: 31
- Registriert: 23.06.2013 06:26
- Computerausstattung: Nicht lachen. Atom Z3775, 2GiB RAM, Win8.1.
Re: Hinzuladen von .ini-Dateien
Code: Alles auswählen
CompilerIf #PB_Compiler_Debugger = 1
#Qkv_Pg = {PfadZurDebuggingDotINI}
CompilerElse
#Qkv_Pg = {PfadZurNormalenDotCFG}
CompilerEndIf
Auch den Ordner, wo die .EXE beim Testen ausgeführt wird kannst du verändern.
(Compileroptionen, dann zweiter Reiter... Glaube ich.)
Zur Abspeicherung:
Kannst den Pfad von OpenFileRequester() in ein File im .EXE- Ordner abspeichern und es dann später auslesen.
Wer braucht schon Unicode? PB5.24LTS
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Hinzuladen von .ini-Dateien
Zur ersten Frage: Ini-Dateien gehören ins "APPDATA" verzeichnis unter Windows, bzw. in HomeVerzeichnis unter Linux, mit nachfolgendem Beispiel Code kannst Du dieses Verzeichnis ermitteln:
Zur zweiten Frage:
Am besten in den Einstellungen:
Datei / Einstellungen / Compiler / Standard den Haken bei
- Temporäres Executable im Quellcode-Verzeichnis erstellen
(welches selbstverständlich Beschreibbar sein sollte)
Gruß
Thomas
Code: Alles auswählen
Procedure.s GetPrefsFile(AppName.s, FileName.s = "settings.prefs", Publisher.s = "ts-soft")
Protected Path.s, slash.s
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
slash = "\"
Path = GetEnvironmentVariable("APPDATA") + "\"
CompilerDefault
slash = "/"
Path = GetHomeDirectory() + "."
CompilerEndSelect
If Publisher
Path + Publisher + slash
If Not FileSize(Path) = - 2
CreateDirectory(Path)
EndIf
EndIf
Path + AppName + slash
If Not FileSize(Path) = - 2
CreateDirectory(Path)
EndIf
If FileSize(Path) = -2
ProcedureReturn Path + FileName
EndIf
EndProcedure
Debug GetPrefsFile("Passwortdingens.exe", "meineIni.ini", "Tanaghra")
Am besten in den Einstellungen:
Datei / Einstellungen / Compiler / Standard den Haken bei
- Temporäres Executable im Quellcode-Verzeichnis erstellen
(welches selbstverständlich Beschreibbar sein sollte)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Hinzuladen von .ini-Dateien
@TS-Soft: Mittlerweile muss man nicht mehr den Pfad aus den EnvVars lesen....
PB ist gewachsen, und das sogar auf allen OS
PB ist gewachsen, und das sogar auf allen OS
Code: Alles auswählen
Debug GetUserDirectory(#PB_Directory_ProgramData)
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Hinzuladen von .ini-Dateien
@Bisonte
Danke für den Hinweis
Ich hatte den Code, bis auf die Debugzeile, sowieso in meinem Baukasten, war also keine Arbeit.
Danke für den Hinweis
Ich hatte den Code, bis auf die Debugzeile, sowieso in meinem Baukasten, war also keine Arbeit.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Hinzuladen von .ini-Dateien
Hallo,
danke für Eure Antworten. Ich hab 10 Minuten später dann in der Hilfe #PB_Compiler_Debugger entdeckt, der mein (zweites) Problem löst:Das ist so ziemlich dasselbe, wie Jan125’s Vorschlag, aber die Ausführungen zu CompilerIf in der Hilfe habe ich nicht wirklich verstanden (was da der Unterschied zu einem 'normalen' If sein soll).
danke für Eure Antworten. Ich hab 10 Minuten später dann in der Hilfe #PB_Compiler_Debugger entdeckt, der mein (zweites) Problem löst:
Code: Alles auswählen
Define.s ZpfV, PfV="Paßwortgenerator.cfg" ; (Ziel)pfad für Voreinstellungen
If #PB_Compiler_Debugger
ZpfV=#Qkv+PfV
Else
ZpfV=GetPathPart(ProgramFilename())+PfV
EndIf
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit
Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Hinzuladen von .ini-Dateien
Ein CompilerIf wird nur einmal ausgewertet, nämlich beim Compilieren. Es sind also CompilerDirektiven, wobei nur der zutreffende Teil Code erzeugt.aber die Ausführungen zu CompilerIf in der Hilfe habe ich nicht wirklich verstanden
PS: Meine Lösung des zweiten Problems finde ich aber eleganter
Es ist auch nur noch dieser Teil, egal ob gedebuggt oder nicht, erforderlich:
Code: Alles auswählen
ZpfV=GetPathPart(ProgramFilename())+PfV
PS2: Es ist seit Jahren nicht mehr üblich Einstellungen im Programmverzeichnis zu erstellen. Diese werden unter Windows meist im verstecktem Verzeichnis "APPDATA" bzw. "Anwendungsdaten" erstellt und sind nur dort , ohne Adminrechte, zu beschreiben. Du bekommst entweder eine Fehlermeldung von Windows oder Deine Einstellungen werden heimlich in "VirtualStore" geschrieben und Dein Programm läuft lediglich im Kompatibilität-Modus.
Das ist nicht Windows-Konform und sollte nur noch bei sehr alten Programmen so vorkommen!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Hinzuladen von .ini-Dateien
Naja, kommt drauf an ob es sich un ein Programm mit Setuproutine oder um ein portables Programm handelt.ts-soft hat geschrieben:Das ist nicht Windows-Konform und sollte nur noch bei sehr alten Programmen so vorkommen!
Idealerweise macht man es wie z.B. bei Softmaker Office und überlässt es dem Nutzer.
Code: Alles auswählen
Global g_Settingini.s
If FileSize(GetPathPart(ProgramFilename()) + "portable.txt") >= 0
g_Settingini = GetPathPart(ProgramFilename()) + "setting.ini"
Else
g_Settingini = GetUserDirectory(#PB_Directory_ProgramData) + "setting.ini"
EndIf
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Hinzuladen von .ini-Dateien
Ich persönlich mag dieses Umgehen der Sicherheitseinstellungen von Windows überhaupt nicht. Portable Programme sollte immer auch Portable genutzt werden, also niemals installiert ins normale System.
Aber mit diesem Problem hat wohl Microsoft zu kämpfen und nicht ich und es wird einer der Gründe sein, warum der User bald nichts mehr allein bestimmt
Aber mit diesem Problem hat wohl Microsoft zu kämpfen und nicht ich und es wird einer der Gründe sein, warum der User bald nichts mehr allein bestimmt
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Hinzuladen von .ini-Dateien
Weil es um Passwort Generator geht. Ich habe letzte Woche einen portablen geschrieben und ist im Netz unterwegs
wen es interessiert:
Direkt-Download von meiner Seite
aus der NFO:
Kurze Rede langer Sinn.
Passwort Generator? Ja, denn warum soll ich mich jedes mal online auf einer
Internetseite anmelden um ein Passwort zu generieren, wenn ich dieses Tool
meinen Bedürfnissen angepasst, bequem auf dem Desktop ausführen kann?
Der Vorteil:
das Passwort muss nicht erst in die Zwischenablage kopiert werden um es dann lokal
zu speichern weil man es dann doch noch irgendwann braucht.
Das kann auch alles mit 2 Klicks erledigt werden.
Der Passwort Generator generiert zufällig aus Millionen von Möglichkeiten starke Passwörter
in einer Länge von 8 - 30 Zeichen
- Sollte nur das Passwort für eine schnelle Anmeldung benötigt werden, reicht es,
die Anzahl der zu generierenden Zeichen einzugeben (Standard wurde auf 20 gesetzt)
und den Button: generiere Passwort klicken.
- danach den Button: Passwort in Zwischenablage kopieren, klicken
das generierte Passwort befindet sich nun in der Zwischenablage und kann überall
sofort eingefügt werden.
- benötigst Du die generierten Angaben für zukünftige Anmeldungen besitzt der
Passwort Generator die Funktion, alle Informationen schnell in eine Text-Datei zu
speichern
- generiere ein Passwort
- gib im ersten Eingabefeld eine Verwendung, Hinweis ein
- gib im zweiten Eingabefeld den zukünftigen oder bestehenden Benutzername oder
Account ein
klicke abschließend auf den Button: Passwort Informationen speichern
Alle mit Passwort Generator erstellten Informationen werden nun in eine Text Datei gespeichert.
Du hast so, immer deine Informationen zur Hand und musst nichts weiter tippen, schreiben oder
zwischen kopieren.
nice and easy
wen es interessiert:
Direkt-Download von meiner Seite
aus der NFO:
Kurze Rede langer Sinn.
Passwort Generator? Ja, denn warum soll ich mich jedes mal online auf einer
Internetseite anmelden um ein Passwort zu generieren, wenn ich dieses Tool
meinen Bedürfnissen angepasst, bequem auf dem Desktop ausführen kann?
Der Vorteil:
das Passwort muss nicht erst in die Zwischenablage kopiert werden um es dann lokal
zu speichern weil man es dann doch noch irgendwann braucht.
Das kann auch alles mit 2 Klicks erledigt werden.
Der Passwort Generator generiert zufällig aus Millionen von Möglichkeiten starke Passwörter
in einer Länge von 8 - 30 Zeichen
- Sollte nur das Passwort für eine schnelle Anmeldung benötigt werden, reicht es,
die Anzahl der zu generierenden Zeichen einzugeben (Standard wurde auf 20 gesetzt)
und den Button: generiere Passwort klicken.
- danach den Button: Passwort in Zwischenablage kopieren, klicken
das generierte Passwort befindet sich nun in der Zwischenablage und kann überall
sofort eingefügt werden.
- benötigst Du die generierten Angaben für zukünftige Anmeldungen besitzt der
Passwort Generator die Funktion, alle Informationen schnell in eine Text-Datei zu
speichern
- generiere ein Passwort
- gib im ersten Eingabefeld eine Verwendung, Hinweis ein
- gib im zweiten Eingabefeld den zukünftigen oder bestehenden Benutzername oder
Account ein
klicke abschließend auf den Button: Passwort Informationen speichern
Alle mit Passwort Generator erstellten Informationen werden nun in eine Text Datei gespeichert.
Du hast so, immer deine Informationen zur Hand und musst nichts weiter tippen, schreiben oder
zwischen kopieren.
nice and easy
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS