List Control -Datei auslesen und Schreiben



  • Hallo zusammen,
    ich habe ein problem und zwar ich lese eine textdatei mit diesem code aus:

    void CLElement_BerichtDlg::OnLaden()
      {
        CString strLesePuffer, strDateiName, strPfad;
        CStdioFile DateiLesen;
        int i=0;
    
        // Holt Pfad und Name mit .exe
        strPfad = GetCommandLine();
        // Dateierweiterung abschneiden
        int nPos = strPfad.ReverseFind( '\\');
        strPfad = strPfad.Mid(1, nPos-1);
    
        // Ermittelten Pfad + Dateiname in strDateiName schreiben
        strDateiName = strPfad +"//text.txt";
    
        // Kompletten Inhalt des Listenelements löschen
        m_List1.DeleteAllItems();
    
        // Datei auslesen
        if (DateiLesen.Open(strDateiName, CFile::modeRead))
        {
          while(DateiLesen.ReadString(strLesePuffer))
          {
            // Datei zeilenweise auslesen
            m_List1.InsertItem(i, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 1, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 2, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 3, strLesePuffer);
            i++;
          }
        }
    

    Mein Problem ist das ich eine text datei habe aus der was in ein List Control
    geschrieben werden soll...
    Ausserdem verstehe ich die Zeilen unter ReadString nicht so ganz was macht
    er denn da genau ???? er ließt etwas und schreibt es dann in die Liste oder wie??? die List Control heißt bei mir genau so wie im code ein Fehler kommt
    nicht nur es passiert halt nichts... 😕

    Ich bekomme es nicht hin dass das augelesene in die m_List1 geschrieben wird

    vielen dank für eure hilfe....



  • Man könnte ja mal in die MSDN Schauen unter CListCtrl, da kann man sehen für was die einzelnen Funktionen da sind und was die machen.

    hast du schon mal mit dem Debuger geschaut ob überhaupt daten in der Variable strLesePuffer stehen?



  • hallo,
    nach überprüfung hab ich festgestellt das er aus der datei garnichts erst ausließt oder sie nicht findet.....

    wieß nicht weiter vielleicht eine Idee warum?????



  • na du kannst doch mit dem Debuger schaun ob das Open() oder das Read fehl schlägt, aber ich geh mal davon aus das es der Open() ist. Meist stimmt der Pfad nicht, schau dir dazu den inhalt der Variablen strDateiName an. an sonsten kannst du dir auch mit GetLastError() den Fehler geben lassen.



  • wie kann ich mir den Inhalt der variable strpfad anzeigen lassen??

    der debugger geht in die Open rein aber mehr passiert nicht... in der
    text datei ist aber was drin daher meine vermutung das er die datei
    nicht findet....



  • gut habe den fehler nun gefunden!!!!!

    der Fehler ist das strpfad zu dem debug ordner springt...
    wie bekomme ich den pfad geändern im debugger modus sehe ich
    zwar den pfad kann ihn aber nicht ändern....

    oder gibt es einen code mit dem ich ihm den pfad sofort vorgebe???????????

    PS. es ist wichtig für mein programm das ich den pfad auf einen anderen
    Ordner verlege.... aufgrund verschiedenster unterdialoge



  • // Holt Pfad und Name mit .exe
        strPfad = GetCommandLine();
    

    sagt doch schon das der Pfad der gleiche ist wie der wo die exe liegt. Dann mach doch einfach einen Pfad den du haben willst fest auf strPfad oder benutz CFileDialog

    strPfad = _T("C:\\deinPfad\\Text.txt");
    
    //und lässt die zeilen
    
    // Holt Pfad und Name mit .exe
        strPfad = GetCommandLine();
        // Dateierweiterung abschneiden
        int nPos = strPfad.ReverseFind( '\\');
        strPfad = strPfad.Mid(1, nPos-1);
    
        // Ermittelten Pfad + Dateiname in strDateiName schreiben
        strDateiName = strPfad +"//text.txt";
    
    //weg
    


  • ich habe den pfad nun angegeben aber wieder nichts wenn ich beim debuggen mit der maus auf den strPfad gehe kommt die Meldung schlechtes ptr

    so sieht mein code jetzt aus

    void CLElement_BerichtDlg::OnLaden()
      {
        CString strLesePuffer, strDateiName, strPfad = _T("C:\\Dokumente und  Einstellungen\Workstation\Desktop\Rechenprogramm\\text.txt");
    
    CStdioFile DateiLesen;
        int i=0;
    
        // Holt Pfad und Name mit .exe
        strPfad = GetCommandLine();
        // Dateierweiterung abschneiden
        int nPos = strPfad.ReverseFind( '\\');
        strPfad = strPfad.Mid(1, nPos-1);
    
        // Ermittelten Pfad + Dateiname in strDateiName schreiben
        strDateiName = strPfad +"//text.txt";
    
        // Kompletten Inhalt des Listenelements löschen
        m_List1.DeleteAllItems();
    
        // Datei auslesen
        if (DateiLesen.Open(strDateiName, CFile::modeRead))
        {
          while(DateiLesen.ReadString(strLesePuffer))
          {
            // Datei zeilenweise auslesen
            m_List1.InsertItem(i, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 1, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 2, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 3, strLesePuffer);
            i++;
          }
        }
    


  • ja ne is klar, du setzt den am Anfang in der variablen strPfad und dann wird der mit dem ganzen GetCommandLine() und so weiter überschrieben und bei open benutzt du dann plötzlich strDateiName, die dann mit strPfad +"//text.txt" überschrieben wird.

    Schaust du hier, so sollte es gehen:

    void CLElement_BerichtDlg::OnLaden()
      {
        CString strLesePuffer, strDateiName = _T("C:\\Dokumente und  Einstellungen\Workstation\Desktop\Rechenprogramm\\text.txt");
    
    CStdioFile DateiLesen;
        int i=0;
    
        // Kompletten Inhalt des Listenelements löschen
        m_List1.DeleteAllItems();
    
        // Datei auslesen
        if (DateiLesen.Open(strDateiName, CFile::modeRead))
        {
          while(DateiLesen.ReadString(strLesePuffer))
          {
            // Datei zeilenweise auslesen
            m_List1.InsertItem(i, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 1, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 2, strLesePuffer);
            DateiLesen.ReadString(strLesePuffer);
            m_List1.SetItemText(i, 3, strLesePuffer);
            i++;
          }
        }
    


  • ich habe es so gemacht funktioniert aber immer noch nicht...

    es kommt der hinweis schlechtes ptr was bedeutet das?



  • irgend etwas scheint mit dem pfad nicht zu stimmen...
    der pfad ist aber richtig 100 %

    vielleicht eine idee wie man es anders machen kann.... 😕



  • änder den Pfad in

    C:\\Dokumente und Einstellungen\\Workstation\\Desktop\\Rechenprogramm\\text.txt

    also schau das du doppelte Backslash anstatt den einfachen im Pfad hast, dann muß das gehen. Ansonsten werden einfache backslash als Optionen interpretiert.


  • Mod

    jimmy0385 schrieb:

    es kommt der hinweis schlechtes ptr was bedeutet das?

    Sag uns den genauen Text oder benutze einen Debugger.

    Ansonsten ist Deine Umschalt-Taste kaputt. Kauf Dir eine neue Tastatur.



  • vielen dank hat geklappt....

    und zum Kommentar von Martin Richter der Debugger sagt genau das schlechtes ptr
    nicht mehr nicht weniger steht auch weiter unten....und der genaue code ist
    auch gepostet mehr habe ich auch nicht im programm bei mir....
    und meine Tastatur läuft Prima.....für solche attacken habe ich nichts
    übrig habe hier keinen schlecht behandelt und möchte auch nicht so
    behandelt werden!!!!!!!!!!!
    Nur schade das sich solche Leute Moderatoren nennen dürfen!!!!!!!

    nochmals danke an CTecS für die Hilfe... 😉


Log in to reply