Shit LPCTSTR (INI-Dateien)



  • Hi,

    wieso zum geier nochmal funzt das nicht wenn ich schreibe:

    char  EinPfad[500];
        DWORD destSize = 500;
        GetPrivateProfileString("System","graphic","NULL",EinPfad,destSize,"test.ini");
    

    Wieso läd der nicht die "test.ini"???? Ich muss immer den ganzen Pfad angeben z.B. "C:\\C++\\ini\\test.ini" erst dann funzt es!

    Das ist doch scheisse! WIE bekomm ich das richtig hin??? Ich kann doch nicht jedes mal diesen verblödeten Pfad angeben, vorallem wenn ich das Programm zum Download anbiete kann man doch net dem User zumuten das er den Pfad dieser blöde Ini-Dateien angibt!!! 😡



  • Du könntest ja mit GetModuleFileName (oder so ähnlich) den Pfad deines Programms rauskriegen, und dann - vorausgesetzt die INI-Datei ist im Programmverzeichnis - dir den Pfad zusammenbauen.

    cya 🙂



  • Stichwort WorkingDirectory

    Wenn du die anwendung aus dem VC++ startest, dann ist das working directory nicht der ordner, in dem die exe liegt (Debug/Release), sondern der hauptordner des projekts.
    nur mal so als hinweis.
    Ich denke GetPrivateProfileString wird in dem working directory nach deinem ini file suchen, wenn du nur einen relativen pfad angegeben hast.

    Mit GetCurrentDirectory() kann man sich das aktuelle verzeichnis holen. ...

    [edit]
    fehlerhafte funktionsangebe korrigiert.
    [/edit]

    grüsse

    [ Dieser Beitrag wurde am 15.03.2003 um 17:40 Uhr von soUrcerer editiert. ]



  • Nein!

    GetModuleFileName
    Dateiname abschneiden
    Pfad + INI-Dateiname



  • Sag ich doch ;)!

    cya 🙂



  • Original erstellt von <pfad>:
    **Nein!

    GetModuleFileName
    Dateiname abschneiden
    Pfad + INI-Dateiname**

    `Das widerspricht dem Beitrag von soUrcerer in keinster Weise.



  • ITask::GetWorkingDirectory funzt aber nicht unter win 95 :o



  • ich bitte vielmals um entschuldigung,

    die funktion muss natülich lauten:
    GetCurrentDirectory()
    und nicht wie fälschlich angegeben
    GetWorkingDirectory() //falsch

    grüsse



  • Mit GetCurrentDirectory geht das nicht!



  • aba doch,

    in meinem schlauen buch steht:

    GetCurrentDirectory() ermittelt das aktuelle Verzeichnis eines Prozesses.

    ob die funktion jetzt die lösung für obiges problem ist, sei dahingestellt.

    grüsse



  • genau, für die lösung des problems ist die funktion aber nicht hilfreich 🙂



  • übrigens,

    ein blick in die MSDN offenbart:

    GetPrivateProfileString

    ...

    lpFileName
    Pointer to a null-terminated string that names the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.

    ...

    Also, bei relativen pfadangaben, wird im windowsverzeichnis nach der ini gesucht, und nirgendwo anders.

    grüsse



  • also:

    char  IniFile[MAX_PATH];
    char  EinPfad[500]
    DWORD destSize = 500;
    
    GetCurrentDirectory(IniFile,MAX_PATH);
    strcat(IniFile, "test.ini"); // oder "\\test.ini" weiss nich genau
    GetPrivateProfileString("System","graphic","NULL",EinPfad,destSize,IniFile);
    

    wie siehts denn so aus?
    habs nicht getestet, aber so würd ich des machen

    grüsse



  • GetCurrentDirectory liefert nicht immer das richtige Verzeichnis



  • es liefert aber nachvollziehbare verzeichnisse !!!

    Es gibt immer das Arbeitsverzeichnis des Prozesses aus ... das kann man natürlich nach belieben verändern, das stimmt schon, aber für gewöhlich macht man das nicht, oder nur absichtlich (z.b. in dem man ne verknüpfung erstellt und dort ein anderes arbeitsverzeichnis auswählt). Dies kann aber vom programmierer durchaus gewünscht sein, da der anwender das ini file dann ablegen kann, wo er will und es nur in der verknüpfung zum programm angeben.

    hat alles vor und nachteile.

    Wenn du aber unbeding den Pfad wissen willst, wo dein Programm liegt, schreib ihn dir halt bei der installation in die registry und hol ihn ab, wenn du ihn brauchst. Fänd die lösung aber nicht sehr elegant.

    oder machs doch mit GetModuleFileName, wie auch schon vorgeschlagen.

    grüsse



  • char inifile[5000];
    int i;
    
    // Dateinamen des Moduls holen (z.B. c:\programme\bla\blumm.exe)
    GetModuleFileName(NULL,inifile,5000);
    
    // blumm.exe davon wegschneiden:
    i=(int)strlen(inifile);
    while (inifile[i]!='\\')
    {
       i--;
    }
    inifile[i+1]='\0';
    
    // ...und test.ini dranhängen:
    strcat(inifile,"test.ini");
    
    // Jetzt steht in inifile: c:\programme\bla\test.ini
    


  • Warum 5000? Warum nicht MAX_PATH?



  • weil 5000 ne schöne Zahl ist 😃
    MAX_PATH hat natürlich mehr Sinn 😃


Anmelden zum Antworten