Daten in Datei Speichern und Aktualisieren



  • case WM_COMMAND:
    TCHAR szString [1024];
    TCHAR szKeyName [1024];
    int i;
    char buffer[255];

    GetWindowText (hEdit, szString, strlen (szString));
    GetWindowText (hEdit1, szKeyName, strlen (szKeyName));

    for (i = 1; i < 11; i++)
    {
    sprintf (buffer, "%d", i);

    WritePrivateProfileString ("EDC", buffer, "NONE", "c:\\utm.ini");

    }
    WritePrivateProfileString ("EDC", szKeyName, szString, "c:\\utm.ini");

    // Druch Drücken der Schaltfäche werden
    // die Daten in die Datei geschrieben
    if (LOWORD (wParam) == ID_WRITEBUTTON)
    {
    GetPrivateProfileString ("EDC", buffer, "", szString, strlen (szString) + 1, "c:\\utm.ini");
    // würde hier gerne Speichern das heißt ich brauche eine Speicher Befehl
    // und darauf aktualiesieren
    }
    return 0;

    Ich weiß das dieser Sourcecode nicht Fehlerfrei noch ist. Aber für einen Anfänger in der Windows Programmierung ist das halt so. 😃 Hoffe du kannst mir helfen. Lg. Thomas



  • Bitte Code-Tags verwenden!

    MfG Kuldren



  • Was sind Code-Tags hatte mit sowas nicht noch zu tun. Erkläre mir das bitte und wenn es geht ein Beispiel dazu! Ich kenn nur die HTML tags. Aber die meist du glauch nicht. Mfg. Thomas



  • Hier im Forum verwendet man sogenannte phpBB-Tags, die funktionieren ähnlich wie HTML (sind aber in eckigen Klammern). Unter anderem kannst du auch deine Quellcodes in [ code ]...[ /code ] oder [ cpp ]...[ /cpp ] einschließen, dann werden sie schön eingrückt und sind für außenstehende besser zu lesen.
    (jeweils ohne die Leerzeichen)

    PS:

    GetPrivateProfileString ("EDC", buffer, "", szString, strlen (szString) + 1, "c:\\utm.ini");
    

    Das liefert vermutlich nicht die richtigen Ergebnisse - schließlich steht in szString (noch) nichts drin, wovon strlen() die Länge ermitteln könnte. (da szString ein Array ist, kannst du hier sizeof() verwenden)

    PPS: stehen eigentlich die richtigen Werte drin, wenn du das INI-File mit dem Editor ansiehst?



  • Danke werds mir merken. Ja das richtige steht schon drinnen ich kann ja schon hinein schreiben in die Datei nur die "for" schleife zwingt am anfang des Programms eine Schleifenfunktion auf bis 10 und ich glaube das es da hat. Denn er überschreibt mir das ganze dann wieder und beim nächsten aufruf dieser Datei kann ich wieder alles neu schreiben! Kommst du bis jetzt noch mit? Wenn nicht meld dich bitte! Mfg Thomas



  • Du willst nacheinander die zehn Einträge wieder auslesen, richtig? Dann mußt du das Auslesen auch in einer Schleife erledigen. Momentan liest du nur den Eintrag aus, dessen Name gerade in "buffer" drinsteht (wenn du vorher schon die obere Schleife durchlaufen hast, ist das "10", andernfalls hast du dort nur Datenmüll).



  • Kannst du mir einen Codeschnipsel mitgeben. ich weiß zwar wie eine for Schleife geht aber micht wie ich sie initialisieren soll. Danke im Voraus. Mfg. Thomas



  • Du hast doch schon die Schleife, mit der du deine INI füllst. Analog dazu kannst du auch die Daten wieder auslesen (nur daß du statt der WritePrivateProfileString() den passenden GetPrivateProfileString() benötigst).



  • Ich möchte das so haben, dass die Datei sich beim nächsten aufruf sich nicht ändert. in Etwa so

    [EDC]
    1=123
    2=125
    .
    .
    .

    [EDC]
    1=123
    2=125
    3=245
    4=456
    .
    .
    .

    Verstehst du was ich meine. Das was du geschrieben mag ja vielleicht stimmen aber ein neuling so wie ich kennt sich nicht aus. Hab es zwar mit einer while Schleife versucht und es geht trotdem nicht. Ich weiß nicht welche variable ich wie initialieren muss. Kannst du mir ein kleines Beispiel mitschicken damit ich mich auskenne.

    Danke im Voraus.
    Mfg. Thomas



  • Wenn du so etwas haben willst, kannst du nicht über die Profile..-Funktionen gehen, sondern mußt dir von Hand etwas zusammenbauen (am besten mit fstreams). In einer regulären INI-Datei kommt jeder Block nur einmal vor.

    Aber ich will mal nicht so sein:

    char names[1024],buffer[1024];
    GetPrivateProfileString("EDC",NULL,"",names,sizeof(names),"c:\\utm.ini");//Namen raussuchen
    char* name=names;
    while(*name!='\0')
    {
      GetPrivateProfileString("EDC",name,"",buffer,sizeof(buffer));
      cout<<"Name:"<<name<<"\nValue:"<<buffer<<"\n\n";
      name+=strlen(name)+1;//gehe zu nächstem Namen
    }
    

    (und am besten schaust du dir mal an, was die Parameter von GetPrivateProfileString bewirken)



  • Danke hast mir wirklich sehr geholfen. Zeiger haben wir in der Schule gar net durchgemacht und in den Tutorials steht alles in chinesisch für mich. Ich wusste nur das es die gibt aber nicht wie man die einsetzt. Naja da werde ich wohl noch die Zeiger durchnehmen müssen. Hoffe ich hab nicht eure zeit beansprucht. Falls ich noch fragen habe Melde ich mich hier nochmal. Mfg. Thomas



  • Hy Ich melde mich wieder hier weil ich wieder einmal vor einem Problem stehe. Ich muss jetzt nämlich den Parameter lpKeyName von 1 bis 10 aufzählen lassen. das mach ich ja mit einer for bzw. while Schleife und es soll noch beim nächsten Aufruf die Daten vorhanden sein die ich zuvor hineingeschrieben habe. Wobei ich das es schon habe. "Danke CStoll". Nur immer wenn ich das Programm Schließen möchte dann gibt es einen Laufzeitfehler aus und ich kann das Programm nur abwürgen.

    for (int i; i < 11; i++)
    { 
      sprintf (buffer, "%d", i); 
      WritePrivateProfileString ("EDC", buffer, NULL, "c:\\utm.ini");
    }
    

    Das müsste ja so gehen! Wenn ihr mir helfen könnt dann Meldet euch bitte! Danke im Voraus!

    Mfg. Thomas



  • Wie genau lautet denn diese Fehlermeldung?

    (wenn ich mir die Doku ansehe, müsste das so funktionieren die Einträge "1" bis "10" aus deiner INI löschen



  • Ja das macht er eh nur mein Kollege möchte das so haben das er von 1 bis 10 nicht selber hineinschreiben kann. Ein kleines Beispiel beschreibt wie ich das meine.

    1=15258
    2=45689
    3=45687
    4=
    5=
    6=
    7=
    8=
    9=
    10=

    Diese Key werte sollte schon drinnen stehen und die einträge nacheinander hinrunterzählen. Denn die Datei wird ja öffters verwendet. Sorry das ich bei den damaligen Beiträge mich nicht so genau ausgedrückt habe.

    Verstehst du jetzt was ich meine?



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten