CFileDialog Textdatei öffnen und auslesen



  • Die Variable m_strOutput ist eine Membervariable. Ich vermute mal das sie nach dem String den Rest mit Leerzeichen auffüllt. Wie bekomme ich es hin das Sie nach dem String keine Leerzeichen mehr auffüllt.



  • m_strOutput.TrimRight();
    m_strOutput.TrimLeft();



  • häng doch mal an die variable ein "\n\r" dran...
    sollte dem abhilfe verschaffen!



  • TCHAR str[2000];
    _tcscpy(str,m_strOutput);

    Daran lag es nicht. Das Problem scheint er mit der Variable str zu haben da diese ja 2000 Zeichen haben soll. kennt einer noch eine Möglichkeit.

    mfG



  • CStdioFile datei(m_pathname,[Open-Parameter]);
    datei.WriteString(m_strOutput + "\n");
    

    So schonmal probiert??



  • Ne bringt mir nix. Mein Problem ist die feste Größe von TChAR str[2000]. Die müsste ich irgendwie Variable bekommen.



  • Also damit kriegst du garantiert keine leere Zeichen in dei Array:

    char str[2000];
    strcpy(str,m_strOutput);

    Du kannst es in Debugmodus auch prüfen



  • Das funktioniert auch nicht, Da die Größe der Variablen str auf 2000 steht. Den rest füllt er immer noch auf. Anbei nochmal den ganzen Code.

    CFileDialog m_ldFile(FALSE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    
        m_strOutput.TrimLeft();
        m_strOutput.TrimRight();
        CString m_sFilePath ="";
    
        char str[2000];
        strcpy(str,m_strOutput);
    
        if (m_ldFile.DoModal() == IDOK)
    
        {   
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeCreate | CFile::modeWrite); 
            datei.Write(str, sizeof(str)); 
            datei.Close();
            MessageBox("Die Startdatei wurde erfolgreich angelegt!", "Datei gespeichert");
        }
    


  • Versuch mal so:

    .....
        if (m_ldFile.DoModal() == IDOK)
    
        {   
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeCreate | CFile::modeWrite);
            datei.Write(str, m_strOutput.GetLength()); 
            datei.Close();
        }
    .....
    

    [ Dieser Beitrag wurde am 14.01.2003 um 15:44 Uhr von Laie editiert. ]



  • Hi,

    warum das Theater mit dem Umwandeln?

    Schreibe

    datei.Write(m_strOutput.GetBuffer(), sizeof(m_strOutput));
    

    doch gleich deinen CString rein.

    Grüße, Volle.



  • Stimmt nicht ganz:
    sizeof(m_strOutput) gibt immer 4.

    Also:

    datei.Write(m_strOutput.GetBuffer(m_strOutput.GetLength()), m_strOutput.GetLength());

    und nicht vergessen:
    m_strOutput.ReleaseBuffer();



  • Danke Super. Das ist genau das was ich gesucht habe. Kann ich das gleiche auch beim Lesen machen.

    CFileDialog m_ldFile(TRUE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    
        char str[2000] ="\0";
        CString m_pathname;
    
        if (m_ldFile.DoModal() == IDOK)
        {
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeRead); 
            datei.Read(str, sizeof(str));
            datei.Close(); 
            m_strOutputDatei = str;
            UpdateData(FALSE);
    


  • 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. ]


Anmelden zum Antworten