GetPrivateProfileString



  • Im m_strdatenbank steht der Pfad der ini-DAtei drin.
    C:\...\test.ini
    Ist daran was falsch. Mein Problem mein pBuf ist leer.



  • Hallo !

    Mal angenommen, "m_strdatenbank" ist ein CString: der Pfad muss mit "\" geschrieben werden (also C:\...\\test.ini).

    Und so klappt das mit dem Buffer:

    Entweder so:

    char pBuf[256];
    GetPrivateProfileString("Perf Programm", "Datenbank", NULL, pBuf, 255, m_strdatenbank);
    

    oder so:

    CString pBuf;
    GetPrivateProfileString("Perf Programm", "Datenbank", NULL, pBuf.GetBuffer(255), 255, m_strdatenbank);
    

    Tschüss



  • ReleaseBuffer(-1) nicht vergessen.



  • Stimmt !
    Danke.



  • Irgendwie kam ich durch eure Hilfe immer noch nicht weiter, mein GetPrivateProfileString liest immer nocht nichts ein. Kann mir niemand helfen?



  • Es ist wirklich dringen ich komm sonst nicht weiter



  • Versuch's mal mit dieser Klasse:

    http://free.pages.at/happosai/download/cinictrl.zip

    (Source online: http://free.pages.at/happosai/cpp/quellcodes/cinictrl.html - ist zum Posten zu lang, Original von Codeguru)

    Dann ungefähr so benutzen:

    CIniCtrl pINI;
    pINI.SetFileName("C:\Programme\App\App.ini");
    CString sDB   = pINI.GetStringValue("Perf Programm", "Datenbank");
    CString sUSER = pINI.GetStringValue("Perf Programm", "User");
    CString sPW   = pINI.GetStringValue("Perf Programm", "Password");
    

    CU

    Happosai

    [edit:] Download-URL war falsch [/edit]

    [ Dieser Beitrag wurde am 17.02.2003 um 15:27 Uhr von Happosai editiert. ]



  • Danke ich werds mal so versuchen, meld mich dann wenn es läuft oder nicht läuft.



  • Ich löse es immer so:

    CString m_pfad = "c:\\data\\test.ini";   //dein pfad eben
    CString test;
    char data[25];     //ist einfach nur ne variable
    GetPrivateProfileString("TEXT","text",data,data,80,m_pfad);
    test = data;
    AfxMessageBox(test); //dient jetzt nur zum testen
    

    Nur mal so zum vergleichen ..



  • Ich löse es immer so das ich ich in die FAQ schaue und mir den Source dort hole den ich mal dort gepostet habe.



  • 😉 So geht's natürlich auch 😃

    Happosai



  • Es funktioniert endlich.
    Also erstmal tausend Dank für eure Hilfe. Ohne euch wäre ich nie weitergekommen. Ich habe die ganze Zeit den Fehler bei dem GetPrivateProfileString gesucht. In Wirklichkeit lag es aber daran, dass ich das ganze in einer if-Schleife hatte

    if(m_file.Open(m_strProfileName, CFile::modeRead))
    {
          //Das funktioniert,aber nur ohne if
          char pBuf[25];
          GetPrivateProfileString("Perf Programm", "Datenbank", pBuf, pBuf, 80, m_strProfileName //Hier steht mein Pfad drinn);
            theApp.m_strdatenbank=pBuf;
          //Das funktioniert,aber nur ohne if
    }
    

    Ich wollte aber das if, denn ich wollte meinem Programm sagen, wenn keine ini.vorhandne ist, gebe eine Meldung aus, dass man eine ini erstellen solte. Was geht an diesem if nicht?

    [ Dieser Beitrag wurde am 18.02.2003 um 12:13 Uhr von wutzi editiert. ]



  • Die if-Verzweigung müsste funzen. Meiner Meinung nach liegt der Fehler noch weiter oben.

    Happosai



  • Aber das Programm funzt ohne if. Dann kann ich doch keinen Fehler davor haben, oder?
    Das steht auf jedenfall davor:

    BOOL CPerfApp::InitInstance()
    {
        CStdioFile file;
        CFile m_file;
        CString filename, txt, m_strini, m_strProfileName, m_strget, m_strsection, m_strkey;
        char buffer[1000];
        filename="\\test.ini";
        static char strBuffer[_MAX_PATH + 1];
        m_strget=_getcwd(strBuffer, _MAX_PATH);
        strcat(strBuffer, "\\perf.ini");
        TCHAR * pszBuffer = (TCHAR*)malloc( (_MAX_PATH+1)*sizeof(TCHAR) );
        m_strProfileName= m_strget+ filename;
     //und dann kommt if....
    

    Die if Funktion hat auch funktioniert ohne den GetPrivateProfileString, d.h. wenn die Datei vorhandne war ging es in den if-Zweig und wenn nicht dann in else, warum klappt das so wie ich es machen will jetzt nicht mehr????



  • wenn du - was ich glaube - den Pfad der exe ermitteln willst und an diesen einfach nur "\\test.ini" anhängen will, würde ICH das ganze so schreiben:

    BOOL CPerfApp::InitInstance()
    {
        CString sAppPath = GetCommandLine();
        sAppPath         = sAppPath.Mid(1, sAppPath.ReverseFind('\\') - 1);
    
        sAppPath += "\\test.ini";
    
        //und dann kommt if....
    }
    

    Happosai



  • Das man das anders schreiben kann ist mir schon klar, aber wenn ich es so mach wie du kommt der Debug Ordner raus und den wollt ich eigentlich nicht. Aber das ist mir eigentlich egal, dass man das besser schreiben kann. Ich brauch erst mal die Grundfunktion.

    if(m_file.Open(m_strProfileName, CFile::modeRead))
    {
          //Das funktioniert,aber nur ohne if
          char pBuf[25];
          GetPrivateProfileString("Perf Programm", "Datenbank", pBuf, pBuf, 80, m_strProfileName //Hier steht mein Pfad drinn);
            theApp.m_strdatenbank=pBuf;
          //Das funktioniert,aber nur ohne if
    }
    

    Also warum funkioniert das GetPrivateProfileString nicht in dieser if Funktion. Kann mir da niemand helfen?



  • Bist du dir auch sicher, dass der Pfad am Ende vor der if-Anweisung auch RICHTIG ist? Lass' ihn dir doch per AfxMessageBox anzeigen. Ist der Pfad korrekt, können wir den Fehler bei CFIle suchen ... 🙄

    Happosai



  • Ja de Pfad ist korrekt!!!
    Woran könnte bei CFile der Fehler liegen?



  • Hab mein Problem gelöst. Mit if(... .Open) öffne ich die Datei. Das GEtPrivatProfile möchte auch die Datei öffnen, da diese dann schon geöffnet ist geht das so nicht. Deswegenen muss ich mit access prüfen ob sie vorhandne ist, dabei öffnet er die Datei nicht.
    Trotzdem danke für deine Hilfe



  • ist es auch möglich einen rel. pfad anzugeben?
    normal liegt die ini datei immer in dem selben ordner mit der exe datei.
    wenn ich einen pfad mit c:\... angebe funktioniert es, gebe ich aber nur den dateinamen an leider nicht 😞


Anmelden zum Antworten