[C++]Problem mit Dateilese/schreibfunktion

Tutorials.at
Verfügbare Informationen zu "[C++]Problem mit Dateilese/schreibfunktion"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Dirty Oerty - exbs
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 6
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: [C++]Problem mit Dateilese/schreibfunktion
  • Letzte Antwort: vor 17 Jahren, 2 Monaten, 24 Tagen, 17 Stunden, 20 Minuten
  • Alle Beiträge und Antworten zu "[C++]Problem mit Dateilese/schreibfunktion"

    Re: [C++]Problem mit Dateilese/schreibfunktion

    Dirty Oerty - 23.01.2007, 18:55

    [C++]Problem mit Dateilese/schreibfunktion
    tag,

    hab mal wieder ein problem :D

    folgendes: ich hab mich nun in die WinAPI etwas eingelesen (also erstellen von fenstern zur laufzeit etc).
    nunja, dabei klappt nun alles. also hab ich angefangen, mein "notizprogramm mit verschlüsselung" von C nach C++ zu schreiben und dann noch draus ne fensteranwendung werden zu lassen.
    ich hab mir folgenden aufbau überlegt:

    ordner "data"
    in dem ordner ne datei "data.cab" (die extension is ja egal)
    und in die datei alle schon registrierten benutzernamen (damit keiner doppelt registriert ist)
    außerdem noch im hauptverzeichnis zu jedem benutzer ne datei mit seinem namen, da steht das passwort drin.

    gut, ich kann mit meinem code nun genau 7 enutzer "erstellen", dannach bekomm ich immer nen absturz. (wenns von der IDE gestarted wird, freierts ein, wenns einfach so von windows gestartet wird, dann kommt ne fehlermeldung "zugriff auf soundso von soundso mit dem befehl read nicht möglich" und es wird beendet)
    nun hab ich ein bisschen rumprobiert und musste feststellen, dass wenn ich die "data.cab" entleer, bevor ich das programm zu 8.mal aufruf, die fehler und abstürze weg sind

    hier nochmal der aufbau der "data.cab"::

    gdfghfhdthdh
    ghdthdthht
    fhdthdthdth (ein paar zeilen müll)
    name1
    name2
    name3
    name4
    name5
    name6
    name7

    name8 wird nie gespeichert. wenn ich name7 lösch, dann kann ich noch nen benutzer erstellen (dessen name dann an stelle von name7 steht)

    ok, ich glaub, das beschreibt mein prob ganz gut.
    es muss also an der funktion liegen, die die "data.cab" schreibt.

    hier der code:

    Code:
    bool RegisterUser (char* Name, char* Passwort)
    {
       ifstream inDatab;//lesestream initialisieren
       inDatab.open("\data\\data1.cab");//data1.cab öffnen (datei mit reg benutzern)
       if (!inDatab) {//Data1 geht nicht auf? => Programm wurde mainpuliert
          MessageBox(g_Hmainwnd,"Kritischer Fehler: Die Datenbank ist nicht vorhanden!\nStarten Sie das Programm neu!","Fehler: Datenbank fehlt",MB_OK | WS_VISIBLE);
          return FALSE;//Fehlschlag
       }
       inDatab.seekg(663);//an lesepos hinter den müll setzen
       char* bufferdb = new char[8];//Speicherbuffer
       int* compcount = new int;//Zählt die Übereinstimmungen
       int* ccount = new int(0);//Länge
       while (!inDatab.eof())//wenn dateiende, dann schluss
       {
          inDatab.getline(bufferdb,8);//eine zeile von max 8 zeichen lesen
          while (*bufferdb)//nicht über char[]länge hinauslesen
          {
             if ((char)(((int)(*bufferdb))+2) == *(Name+(*ccount))) {//gleicher buchstabe, dann:
                *compcount+=1;//eine übereinstimmung mehr
             }
             *ccount+=1;//länge um eins erhöhen
             bufferdb+=1;//nächstes zeichen
          }
          if (*ccount == *compcount) {//Länge = Übereinstimmungen? (alles gleich)
             inDatab.close();//stream wieder schließen
             return FALSE;//Fehlschlag
          }
       }
       inDatab.close();//stream schließen
       delete [] bufferdb,compcount,ccount;//speicher freigeben
       if (!MakeUserDat(Name,Passwort)) { //Benutzerdatei erstellen
          return FALSE;//Fehlschlag
       }
       ofstream outDatab;
       outDatab.open("\data\\data1.cab",ios::app);
       while (*Name)
       {
          outDatab << (char)(((int)*Name)-2);
          Name++;
       }
       outDatab << '\n';
       outDatab.close();
       return TRUE;//neuer benutzer erfolgreich registriert
    }

    ok, meine frage is ja schon (hoffentlich) klar.

    also, warum geht das nicht??

    mfg
    daniel



    Re: [C++]Problem mit Dateilese/schreibfunktion

    exbs - 23.01.2007, 21:49


    bin net so tief drin in api ... hab mal begonnen aba das erstmal auf eis gelegt. und ich seh (sry) in dem code mit den ganzen komentaren och net so gut durhc. das erste was ich fragn würde ist irgendwo nicht genug speicher reserviert für die textdatei ... sprich wenn du liest oda schreibst ... ?!



    Re: [C++]Problem mit Dateilese/schreibfunktion

    Dirty Oerty - 23.01.2007, 22:10


    nunja, also "speicher für die datei" ist nirgendwo im code richtig per dymn speicherzuweisung gegeben. ich hab halt nen ofstream gmacht.
    und wenn du den speicher meinst, auf den der charpointer zeigt, des kann ja nicht sein, weil der wird ja

    1. bei programmende wiederfreigegeben (kommt vllcht nicht rüber, aber zwschn den einzelnen registrierungen der benutzer wird das prog immer wieder neu gestartet.)

    2.nach jedem auslesen wieder überschrieben, bis max 8 stellen


    allerdings hab ich noch n bisschen rumprobiert, wenn ich den müll vorne lösch, dann gehts (zumindest hab ich nun schon 14 benutzer gescafft)

    aber warum geht das mit müll vorne dran nicht?
    ich kann dir auch mal den kommentar rausmachen, wenn du willst.



    Re: [C++]Problem mit Dateilese/schreibfunktion

    exbs - 23.01.2007, 22:32


    Das hört sich für mich echt so an als wäre net genug speicher da. Wenn ich mir den "Müll" so anseh is das eigl genau das, was dann den Pltz für namen bis 14 braucht. Dumm nur ist, dass ich in eigl nur in C schreibe und deswegen an einigen stellen nen bisschen aufn schlauch steh. Warum machs´t du denn den speicher net dynamisch ?



    Re: [C++]Problem mit Dateilese/schreibfunktion

    Dirty Oerty - 23.01.2007, 23:35


    ich weiß nich ob das mit ofstream geht, das ist ja genaugenommen ne klasse.



    Re: [C++]Problem mit Dateilese/schreibfunktion

    Dirty Oerty - 24.01.2007, 19:56


    also es geht nicht, habs probiert mit

    ifstream* inData = new ifstream;

    die zeile ging, aber die nachher nicht. also zeilen wie:

    if (!inData) {...}

    es ging auch nicht so:

    if (!*inData) {...}

    fällt jemanden vllcht ne bessere funktion dafür ein?
    also vom prinzip her.

    mfg
    daniel



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Hello World - gepostet von icewulf24 am Mittwoch 03.10.2007
    Automatisch abschalten - gepostet von ThE_B0MBeRMaN am Mittwoch 22.11.2006
    Malloc Verständnisproblem - gepostet von Zuul am Donnerstag 04.01.2007
    Quersumme errechnen - gepostet von rattenfan am Sonntag 28.01.2007
    Zeichen - gepostet von schlodel am Freitag 13.04.2007
    Wurzelberechnung - gepostet von Kimi am Samstag 17.11.2007
    Programm aufrufen in ASM - gepostet von r00tnix am Freitag 28.07.2006
    Suche geeignete programmiersprache - gepostet von vpascal am Mittwoch 08.08.2007
    2 Fragen - gepostet von d.d.d. am Samstag 24.03.2007
    C-Programm aus C-Programm starten ??? - gepostet von Stevox am Mittwoch 13.12.2006



    Ähnliche Beiträge wie "[C++]Problem mit Dateilese/schreibfunktion"

    Wir haben ein Problem!!! - Langi (Freitag 09.11.2007)
    Hassu N Problem ????? - Anonymous (Montag 13.12.2004)
    schon das erste problem.... :-( - jonnyb (Donnerstag 21.06.2007)
    Ein PC NooB hat ein Sound Problem - Vergil (Mittwoch 31.10.2007)
    Problem - Dragonfly (Samstag 21.07.2007)
    Rießen Problem!!Bitte alle lesen!!!! - Jule14 (Samstag 07.01.2006)
    !!! kleines Problem bei Bundesliga 05/06 !!! - bundesliga0506 (Mittwoch 20.07.2005)
    Point of Existence 2 Mod Singleplayer Problem! - dirtrunner (Dienstag 05.09.2006)
    Und noch ein Altbekannter Aero - BAUR547 (Donnerstag 03.11.2011)
    USKO - ServerLogin Problem "Disconnected from Server&qu - rauron (Freitag 21.04.2006)