CFile kontra fprintf - wie überprüfe ich den Inhalt ?



  • hab ich bereits, siehe oben !



  • Hast du es schon mit Debuggen versucht?



  • Ja, aber aus den Werten die einem da gegeben werden werd ich ja nun gar nicht schlau (r5, r1, r8, lsr r9) und die Fehlermeldungen die ich bis zu einer bestimmten Cursorpostion ausgegeben kriege, passen irgendwie auch nicht. denn das hat nichts mit meinem problem zu tun.



  • poste doch bitte trotzdem noch mal wie es jetzt gerade aussieht, du hast doch ein paar Änderungen vorgenommen?



  • Stefan897987 schrieb:

    Ja, aber aus den Werten die einem da gegeben werden werd ich ja nun gar nicht schlau (r5, r1, r8, lsr r9) und die Fehlermeldungen die ich bis zu einer bestimmten Cursorpostion ausgegeben kriege, passen irgendwie auch nicht. denn das hat nichts mit meinem problem zu tun.

    eigentlich solltest du "text" beobachten, denn um die Variable geht es doch, oder? 😕
    Fehlermeldungen???



  • @Pellaeon: so siehts jetzt aus:

    if (file.Open(dateiname, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate, &e )) { 
          if (file.GetLength() == 0) { 
              text.Format(_T("Log file Bsp1 %s %s\n"), geraet, typ); 
          } 
          else { 
              text.Format(_T("Bsp2 %s %s\n"), geraet, typ); 
          } 
          file.SeekToEnd(); 
          file.Write(text, text.GetLength()*sizeof(TCHAR));  // evtl. auch: file.WriteString(text); ???   
          file.Close(); 
      } // end if 
      else {      
          MessageBox(L"Fehler beim Dateiöffnen",L"Error"); 
      }
    


  • Stefan897987 schrieb:

    Merkwürdigerweise ist sie aber 2,17 KB groß !

    Die logische Länge ist fast immer kleiner als die pyhsikalische Länge der Datei. Hängt damit zusammen wie ne Datei gespeichert wird.



  • Naja, da scheint CFile aber echt noch viel mehr als fprintf() abzuspeichern. Nach der Speicherung eines Buchstabens mit fprintf() ist die Datei nur 80 Byte groß.
    Hat niemand eine Lösung für mein Problem ? Bei CStdioFile muss ich wieder einen char* als Dateinamen haben und kein String. Würde das ja mal ausprobiern, aber da muss ich wieder so einigen Code ändern um einen char* als Dateinamen zu haben. Dieser wird nämlich dynamisch erzeugt.



  • Du brauchst keinen char*. 😕

    Guck:

    CStdioFile datei;
    			CString strDateiname;
    			strDateiname.Format(_T("%s\\%s.log"), strLogPfad, tmNow.Format(_T("%Y_%m_%d")));
    			if (datei.Open(strDateiname, CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate))
    

    Direkt aus einem funktionierenden Projekt kopiert. 😉



  • Oh Gott ! Ich werd nie wieder in ein Forum schreiben ! Oh Gott wie peinlich ! Das Problem scheint schon lange gelöst, denn ich vollkranker Idiot hab die txt-Datei immer auf nem PDA angeschaut und da steht immer nur L in der Datei. Da die Datei aber irgendwie jedes Mal ziemlich groß war, hab ich sie auf nen PC gezogen und siehe da: es steht alles drin ! Na super ! Das mit dem PDA hätte ich wohl mal dazu sagen sollen. Bin gar nicht drauf gekommen !
    Sorry, sorry, sorry an alle, die sich hier den Kopf zerbrochen haben. Also in der Fassung die ich als letztes gepostet habe klappts alles ! Auch ohne CStdioFile.
    Ein Problem bleibt noch: wie kriege ich die kleinen fiesen Vierecke, die bei Leerzeichen eingefügt werden weg ? Hatte da was mit file.WriteString(text); im Zusammenhang mit CStdioFile gelesen. Klappt aber nicht (diesmal wirklich nicht --> Fehlermeldung !) !



  • ich würd sagen das ist eher ein Problem der Anzeige als ein Problem des Auslesens der Datei



  • Naja, offenbar gibts Schreibfunktionen, die eben ASCII und nicht binär schreiben. Oder eben umgekehrt. Mit CStdioFile und file.WriteString() sollten diese kleinen Vierecke - die übrigens nur da auftreten wo ein \n steht und nicht bei jeder Leerstelle - scheinbar im Editor nicht mehr sichtbar sein. Aber hinhauen tuts nicht, daher dachte ich, es gibt eine Alternative.



  • Das ist die Fehlermeldung wenn ich file.WriteString() benutze:

    error C2039: 'WriteString' : is not a member of 'CStdioFile'
    c:\...\mfc\include\afx.h(1487) : see declaration of 'CStdioFile'



  • ? Welcher Visual C++ Version hast du?



  • Visual C++4 SP4



  • 4 😮
    Ich hätte gerne mal aus historischem Interesse nen Screenshot. 😉
    Oder ist das die Version für WinCE?



  • wird CE sein, da sind manchmal leider so kleine Änderungen an den Klassen.

    Da wist du wohl mal in die MSDN zum CE schauen müssen oder *TADA* intellisense bemühen um zu schauen, wie die Methode heißt.



  • Ja, CE-Plattform. Werd dann wohl mal bei MSDN gucken gehen. Abschließende Frage hier noch, was ist denn eigentlich schneller - CFile oder fprintf() ? Beim Datei öffnen und/oder schreiben ?


Anmelden zum Antworten