Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

1

13.02.2006, 19:02

INIs mit relativem Pfad lesen?

Ich wollte mir grad selber eine kleine Funktion schreiben die INI Werte ausliest. Dazu nutze ich "GetPrivateProfileInt". Funktioniert generell super!

Nur leider liest diese Funktion die INI entweder aus einem absoluten Pfad oder aus dem Windows Ordner, beides keine wirkliche alternative. Ich bin dann aber in diversen Foren etc auf die Funktion "GetModuleFileName" gestossen.

Diese sollte den Pfad zu meiner Exe auflisten können. Ich habe mir aus einem Forum dann diesen Code hier genommen.

C-/C++-Quelltext

1
2
3
4
5
6
std::string strAppName;

    ::GetModuleFileName(NULL, szAppPath, 512);

    strAppName = szAppPath;
    strAppName = strAppName.substr(strAppName.rfind("\\") + 1);


Funktioniert soweit super, liefert eben einen String zurück welcher den Pfad der Datei einthält.

Hier wollte ich nun also ansetzen. Meine Lesefunktion für die INI schaut gerade so aus:

C-/C++-Quelltext

1
GetPrivateProfileInt("Bomberman", "xSize", 15,"Bomberman.ini");


Nun will ich den erhaltenen relativen Pfad mit dieser Bomberman.ini kombinieren, aber wie?

Schätze das ist einfach, aber naja ^^

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

13.02.2006, 19:09

nimm doch einen relativen Pfad.... das geht definitiv auch... z.B. "folder/test.ini". Ich glaub mich aber zu erinnern das es Probs gab wenn man aus dem jetztigen (Current) Folder eine Ini lesen wollte. Es kann aber auch sein, das das nur meine eigene Unfähigkeit war.

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

13.02.2006, 21:59

GetCurrentDirectory() ist hier besser. Dann mit sprintf zb an das Verzeichnis '\\' und den Namen der Datei anhängen.
Das Prob hatte ich auch mal und ich find die Lösung schrecklich umständlich.
Mein Projekt: Rise of the Sylvan

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

14.02.2006, 11:04

Du hast doch in der Variablen "strAppName" bereits den relativen Pfad, einschließlich des Backslashes '\\', oder? Die Variable ist vom Typ std::string, also konkateniere doch einfach den Namen der INI-Datei:

C-/C++-Quelltext

1
strAppName += "Bomberman.ini";

...oder habe ich Dein Problem nicht verstanden...?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

14.02.2006, 12:30

ja er hat den Pfad ... er wundert sich nur warum "Bomberman.ini" nicht geht. Warum das so ist weiss ich auch nicht, fakt ist aber das das eben nicht geht. deshalb einfach ini in Ordner und dann "folder/B.ini" auslesen, ist das einfachste wie ich finde. Wenn es unbedingt in dem gleichen Ordner sein soll, muss man eben den absoluten Pfad angeben.

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

7

14.02.2006, 21:54

Zitat von »"koschka"«

ja er hat den Pfad ... er wundert sich nur warum "Bomberman.ini" nicht geht. Warum das so ist weiss ich auch nicht, fakt ist aber das das eben nicht geht. deshalb einfach ini in Ordner und dann "folder/B.ini" auslesen, ist das einfachste wie ich finde. Wenn es unbedingt in dem gleichen Ordner sein soll, muss man eben den absoluten Pfad angeben.


Bomberman.ini geht nicht weil er die ini dann im Windowsordner sucht. Ich hab meine das erste mal da auch reingetan, schon witzig wieviele (stellenweise auch namhaftere) Programme dort vertreten sind.

Ich finde es aber unmöglich wenn Spiele sich an alle Ecken und Enden installieren, meine Software soll immer nur brav einen Ordner in Beschlag nehmen =)

Zitat von »"Steven77"«


Du hast doch in der Variablen "strAppName" bereits den relativen Pfad, einschließlich des Backslashes '\\', oder? Die Variable ist vom Typ std::string, also konkateniere doch einfach den Namen der INI-Datei:
Code (C++):
strAppName += "Bomberman.ini";

...oder habe ich Dein Problem nicht verstanden...?


Geht das so? Hab das nun nicht ausprobiert aber hatte immer Probleme beim "addieren" von Strings. Im Nachhinein hätte ich wohl an sprintf denken können aber naja.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

14.02.2006, 22:18

dann nimm fertige strings.... aus string.h

C-/C++-Quelltext

1
2
3
4
5
6
7
std::basic_string<char> MyString = "hallo";
MyString += " du";

//alles funzt

// da wir aber im 21.Jahrhundertleben und nicht Anfang der 70er... nehmen //wir selbstverständlich UNICODE. 


std::basic_string<wchar_t> MyUString = L"halloU";


mit .c_str() bekommst du den gewohnten pointer auf die Adresse des Strings.


... das er dann im WindowsOrdner sucht habe ich noch nicht gewusst, das erklärt einiges...

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

9

15.02.2006, 10:37

könnte man denn nicht einfach
"..\\Bomberman.ini"
eingeben?

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

15.02.2006, 11:16

Zitat von »"babelfish"«

könnte man denn nicht einfach
"..\\Bomberman.ini"
eingeben?

Ich glaube, Du meinst ".\\Bomberman.ini" (mit nur einem Punkt)...?
Bei zwei Punkten würde er ja die Verzeichnisstruktur "hinaufklettern".

Werbeanzeige