CFileDialog Textdatei öffnen und auslesen



  • Hi,

    ja, klar. Das war ein Schreibfehler. Tut mir Leid.

    Gruß, Volle.



  • Ich habe jetzt einiges ausprobiert. Ich komme nicht darauf wie das gehen soll. Irgendwie stehe ich auf dem Schlauch.



  • Hi dvo,

    hier ist mal ein Beispiel, aber das findest du auch über Faq und Forumsuche:

    void CEnumProcessesDlg::OnWrite() 
    {
        CTime time = CTime::GetCurrentTime();
        CString timeStr = time.Format("%H:%M:%S");
    
        CFile file;
        CFileException error;
    
        file.Open("test.dat", CFile::modeWrite|CFile::modeCreate, &error);
    
        if (error.m_cause)
        {
            error.ReportError();
        }
        else
        {
            file.Write(timeStr.GetBuffer(0), timeStr.GetLength());
            timeStr.ReleaseBuffer();
            file.Close();
        }
    }
    
    void CEnumProcessesDlg::OnRead() 
    {
        CString timeStr;
    
        CFile file;
        CFileException error;
    
        file.Open("test.dat", CFile::modeRead, &error);
    
        if (error.m_cause)
        {
            error.ReportError();
        }
        else
        {
            file.Read(timeStr.GetBuffer(8), 8); //hier 8 weil in meinem File nicht mehr drin ist
            timeStr.ReleaseBuffer();
            file.Close();
        }
    }
    

    Grüße, Volle.



  • Richtig das war mir klar. Nein, ich brauch das Ganze variabel. Jetzt ist die Anzahl der Zeichen ja auf 8 begrenzt.

    mfG Dominik



  • Hab genau das gleiche prob bei mir sinds die Í Ì anstatt den Vierecken

    CFile dateiLesen( m_strDirectoryLoader + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Name, CFile::modeRead );
    
            //Datei einlesen
            dateiLesen.Read( str, sizeof( str ) ); 
            dateiLesen.Close(); 
            m_strText = str; 
    
            int a = m_strText.Replace("Ìx", "  ");
            int b = m_strText.Replace("Íx", "  ");
            int c = m_strText.Replace("Ì", " ");
            int d = m_strText.Replace("Í", " ");
            int e = m_strText.Replace("12345", m_strZufallszahl);
    
            //Datei Speichern!
            FILE* dateiSchreiben;
            dateiSchreiben = fopen(m_strDirectoryScript + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Name, "w+");
    
            fputs(m_strText,dateiSchreiben);
            fclose(dateiSchreiben);
    
            m_strText = "";
    

    tchar ---> vierecke
    char ---- diese I s mit appostrov ?
    ich werds gleich mal ausprobieren eure lösung sonst sind datein die Normalerweis 2kb Gross sind leicht mal 20 Gross

    [ Dieser Beitrag wurde am 15.01.2003 um 21:46 Uhr von DaRpH editiert. ]



  • andere frage Wenn ich diese I mit Leerzeichen ersetz hab geht dann auch .trimleft .trimright

    dann hät man ja die Leerzeichen entfernt

    Und die char buffer leert man mit

    char buffer[10000]; //<<---- Ist bei mir eine Public deshalb die frage wie leer ich sie

    buffer.ReleaseBuffer();

    wie ich das jetzt verstanden hab oder??

    weil bei mir mischen sich auch noch die Datein untereinander( es werden ca 169 Datein hintereinander geöffnet)

    Könntet ihr mir plz sagen wie man alle Buffer leert das sich die Datein nicht mehr vermischen weil wenn ich eine einzelne Datei bearbeite gehts...

    [ Dieser Beitrag wurde am 15.01.2003 um 22:02 Uhr von DaRpH editiert. ]



  • Hallo. Schau Dir oben die Beispiele wie man in eine Datei schreiben kann wenn die Größe variabel sein soll. Dann werden die restlichen Zeichen nicht mehr mit Í 's aufgefüllt.

    mfG dvo



  • ja das ist jetz klar aber:

    Wie kann ich die chars leeren ich muss sie imemr wieder leeren weil sie Publics sind.

    Sonst mischen sich bei mir die Dateininahlte

    test[10];
    test = " "; <--- oder wie kann mans leeren

    so und nun noch die frage wie kan ichs auch mit variabler Grösse speichern ?

    Edit: Oh Sorry ich seh ja grad ich speichers ja als CString gg hatte niochn alten char strSchreiben rumliegen hatte mich verwirrt Thx nochmal

    aber die Frage mit char leeren interessiert mich immer noch

    [ Dieser Beitrag wurde am 16.01.2003 um 14:01 Uhr von DaRpH editiert. ]



  • Also hier nochmal:

    datei.Write(m_strOutput.GetBuffer(m_strOutput.GetLength()), m_strOutput.GetLength());
    //schreibt den Wert von m_strOutput in eine Datei! Größe ist variabel und richtet sich nach nach dem CString aus m_strOutput 
    
    m_strOutput.ReleaseBuffer();
    // leert den Buffer wieder
    

    Gruß Dominik



  • habs getestet mit dem Resultat das es jetzt leere datein Speichert (0 byte) Hier mein code bitte sagt mir was falsch ist ich hab di eVermutung das die Grösse des CString doch nicht auf diese Art geht :

    if(Ordner==5)
        {   m_strText.ReleaseBuffer();
            CFile dateiLesen(m_strDirectoryLoader + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Ordner4 + "\\" + Ordner5 + "\\" + Name, CFile::modeRead );
            //Datei einlesen
            dateiLesen.Read(m_strText.GetBuffer(m_strText.GetLength()), m_strText.GetLength());
            dateiLesen.Close(); 
    
            int e = m_strText.Replace("12345", m_strZufallszahl);
    
            //Datei Speichern!
            FILE* dateiSchreiben;
            dateiSchreiben = fopen(m_strDirectoryScript + "\\" + Ordner1 + "\\" + Ordner2 + "\\" + Ordner3 + "\\" + Ordner4 + "\\" + Ordner5 + "\\" + Name, "w+");
    
            fputs(m_strText,dateiSchreiben);
            fclose(dateiSchreiben);
        }
        UpdateData(false);
    


  • Probier mal UpdataData(FALSE)



  • naja das ist ja wohl nicht ernst gemeinz oder ...

    schau mal ganz unten in meinem Code false und FALSE ist in dem Fall das gleiche



  • also ich hab den fehler aber nicht die lösung

    indem Moment wo ich die Datei einlese ist m_strText wirklich noch 0

    deine Funktion geht also doch nur bei speichern da vor dem öffnen m_strText noch keine Grösse hat. Allerdings kann man es auch ohne Grössenangabe speichern siehe Codebeispiel 1 von mir. Also ist diese Funktion irgendwie sinlos ??

    Also jetzt die Frage neu formuliert :

    Wie krieg ich vor dem öffnen einer Datei die Grösse von der Datei und diese Grösse müsste dann auch noch die Einheit der Grösse von CFile.Read haben.

    Für eine Lösung wär ich sehr dankbar ich such nehmlich schon 2 Monate danach...
    derweil hab ich an ner anderen Stelle wietergeschrieben gg

    Grüsse
    Hendrik



  • Hallo,

    ich habe ein änhliches Problem bzw. das selbe wie Darph 😉
    wäre echt nett wenn ich uns helfen köntet. Danke



  • CStdioFile myFile("c:\\deinFile.txt", CFile::modeReadWrite);
              CString str = "";       
    
          while(myFile.ReadString(str))//das File wird zeilenweise Ausgelesen
          {
                    //str enthält jeweils die Zeile aus deinem File
            //TODO, hier kannst du mit der jeweiligen Zeile machen 
                    //was du willst
          }
              myFile.Close();
    

    Versuche das mal klappt bei mir auch



  • kannst du mir plz mal deine gesamten Öffnen schliessen Funktionen zeigen weil bei mir bleib der CString leer wenn ich CStdioFile nehm

    Bitte Bitte gg



  • Schreiben in eine Datei:

    void CStartdatei_ErstellenDlg::OnSpeichern() 
    {
        CFileDialog m_ldFile(FALSE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    
        m_strOutput.TrimLeft();
        m_strOutput.TrimRight();
        CString m_sFilePath ="";
    
        if (m_ldFile.DoModal() == IDOK)
    
        {   
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeCreate | CFile::modeWrite); 
            datei.Write(m_strOutput.GetBuffer(m_strOutput.GetLength()), m_strOutput.GetLength());
            datei.Close();
            m_strOutput.ReleaseBuffer(); 
            MessageBox("Die Startdatei wurde erfolgreich angelegt!", "Datei gespeichert");
        }
        else
            OnCancel();
    
    }
    

    Lesen der Datei:

    void CStartdateiDlg::OnFileOpen() 
    {
        CFileDialog m_ldFile(TRUE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    
        if (m_ldFile.DoModal() == IDOK)
        {
            m_sFilePath = m_ldFile.GetPathName();
            CStdioFile myFile(m_sFilePath, CFile::modeReadWrite);
            CString str = "";       
    
            myFile.ReadString(str);
            m_strOutputDatei= str;
            myFile.Close();
    
            UpdateData(FALSE);
        }
    }
    


  • Original erstellt von dvo:
    **```cpp
    CStdioFile myFile("c:\deinFile.txt", CFile::modeReadWrite);
    CString str = "";

      while(myFile.ReadString(str))//das File wird zeilenweise Ausgelesen
      {
                //str enthält jeweils die Zeile aus deinem File
        //TODO, hier kannst du mit der jeweiligen Zeile machen 
                //was du willst
      }
          myFile.Close();
    
    
      
      
    Versuche das mal klappt bei mir auch**
    

    Das finde ich ja nett, wenn meine Lösung die Runde macht... 😉
    Das schreiben in die DAtei kann man auch mit CStdioFile machen:

    CStdioFile myFile(strFileName, CFile::modeCreate | CFile::modeWrite );
    myFile.WriteString(str);
    

    Ciao Stalin



  • Danke schonmal ich werds jetzt testen

    Ich hab auch noch ne Lösung mit fgets und fputs probiert aber ist auch zwischendrin dann char.

    thx thx wär glaub ich mal was für den FAQ weil ich hab dieses Zeug in 4 Verschieden Varianten probiert und nie gings zufriedenstellend. Echt nice deine Lösung!!


Anmelden zum Antworten